--- /dev/null
+{
+ "phabricator.uri" : "https://phabricator.kde.org/"
+}
--- /dev/null
+cmake_minimum_required(VERSION 3.5)
+
+set(KF5_VERSION "5.54.0") # handled by release scripts
+project(KCoreAddons VERSION ${KF5_VERSION})
+
+include(FeatureSummary)
+find_package(ECM 5.54.0 NO_MODULE)
+set_package_properties(ECM PROPERTIES TYPE REQUIRED DESCRIPTION "Extra CMake Modules." URL "https://projects.kde.org/projects/kdesupport/extra-cmake-modules")
+feature_summary(WHAT REQUIRED_PACKAGES_NOT_FOUND FATAL_ON_MISSING_REQUIRED_PACKAGES)
+
+
+set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
+
+
+include(GenerateExportHeader)
+include(CMakePackageConfigHelpers)
+include(ECMSetupVersion)
+include(ECMGenerateHeaders)
+include(ECMQtDeclareLoggingCategory)
+include(ECMAddQch)
+include(ECMSetupQtPluginMacroNames)
+
+include(KDEInstallDirs)
+include(KDEFrameworkCompilerSettings NO_POLICY_SCOPE)
+include(KDECMakeSettings)
+
+option(BUILD_QCH "Build API documentation in QCH format (for e.g. Qt Assistant, Qt Creator & KDevelop)" OFF)
+add_feature_info(QCH ${BUILD_QCH} "API documentation in QCH format (for e.g. Qt Assistant, Qt Creator & KDevelop)")
+
+set(REQUIRED_QT_VERSION 5.9.0)
+find_package(Qt5 ${REQUIRED_QT_VERSION} CONFIG REQUIRED Core)
+
+ecm_setup_qtplugin_macro_names(
+ JSON_NONE
+ "K_PLUGIN_FACTORY"
+ JSON_ARG2
+ "K_PLUGIN_FACTORY_WITH_JSON"
+ "K_PLUGIN_CLASS_WITH_JSON"
+ CONFIG_CODE_VARIABLE
+ PACKAGE_SETUP_AUTOMOC_VARIABLES
+)
+
+find_package(Threads)
+
+# Configure checks for kdirwatch
+find_package(FAM)
+
+set_package_properties(FAM PROPERTIES
+ PURPOSE "Provides file alteration notification facilities using a separate service. FAM provides additional support for NFS.")
+
+set(HAVE_FAM ${FAM_FOUND})
+
+option(ENABLE_INOTIFY "Try to use inotify for directory monitoring" ON)
+if(ENABLE_INOTIFY)
+ # Find libinotify
+ find_package(Inotify)
+ set_package_properties(Inotify PROPERTIES
+ PURPOSE "Filesystem alteration notifications using inotify")
+ set(HAVE_SYS_INOTIFY_H ${Inotify_FOUND})
+else()
+ set(HAVE_SYS_INOTIFY_H FALSE)
+endif()
+
+# Generate io/config-kdirwatch.h
+configure_file(src/lib/io/config-kdirwatch.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/src/lib/io/config-kdirwatch.h)
+
+include(ECMPoQmTools)
+
+ecm_setup_version(PROJECT VARIABLE_PREFIX KCOREADDONS
+ VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/kcoreaddons_version.h"
+ PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/KF5CoreAddonsConfigVersion.cmake"
+ SOVERSION 5)
+
+
+if (IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/po")
+ ecm_install_po_files_as_qm(po)
+endif()
+
+kde_enable_exceptions()
+
+
+#add_definitions(-DQT_DISABLE_DEPRECATED_BEFORE=0x060000)
+
+
+add_subdirectory(src)
+if (BUILD_TESTING)
+ add_subdirectory(autotests)
+ add_subdirectory(tests)
+endif()
+
+# create a Config.cmake and a ConfigVersion.cmake file and install them
+set(CMAKECONFIG_INSTALL_DIR "${KDE_INSTALL_CMAKEPACKAGEDIR}/KF5CoreAddons")
+
+if (BUILD_QCH)
+ ecm_install_qch_export(
+ TARGETS KF5CoreAddons_QCH
+ FILE KF5CoreAddonsQchTargets.cmake
+ DESTINATION "${CMAKECONFIG_INSTALL_DIR}"
+ COMPONENT Devel
+ )
+ set(PACKAGE_INCLUDE_QCHTARGETS "include(\"\${CMAKE_CURRENT_LIST_DIR}/KF5CoreAddonsQchTargets.cmake\")")
+endif()
+
+configure_package_config_file("${CMAKE_CURRENT_SOURCE_DIR}/KF5CoreAddonsConfig.cmake.in"
+ "${CMAKE_CURRENT_BINARY_DIR}/KF5CoreAddonsConfig.cmake"
+ INSTALL_DESTINATION ${CMAKECONFIG_INSTALL_DIR}
+ )
+
+install(FILES "${CMAKE_CURRENT_BINARY_DIR}/KF5CoreAddonsConfig.cmake"
+ "${CMAKE_CURRENT_BINARY_DIR}/KF5CoreAddonsConfigVersion.cmake"
+ "${CMAKE_CURRENT_SOURCE_DIR}/KF5CoreAddonsMacros.cmake"
+ DESTINATION "${CMAKECONFIG_INSTALL_DIR}"
+ COMPONENT Devel )
+
+install(EXPORT KF5CoreAddonsTargets DESTINATION "${CMAKECONFIG_INSTALL_DIR}" FILE KF5CoreAddonsTargets.cmake NAMESPACE KF5:: )
+install(EXPORT KF5CoreAddonsToolingTargets DESTINATION "${CMAKECONFIG_INSTALL_DIR}" FILE KF5CoreAddonsToolingTargets.cmake NAMESPACE KF5:: )
+
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/kcoreaddons_version.h
+ DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF5} COMPONENT Devel )
+
+install(FILES kcoreaddons.categories DESTINATION ${KDE_INSTALL_CONFDIR})
+
+feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES)
--- /dev/null
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the copyright
+ notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+3. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--- /dev/null
+ GNU LIBRARY GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1991 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor
+ Boston, MA 02110-1301, USA.
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the library GPL. It is
+ numbered 2 because it goes with version 2 of the ordinary GPL.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+ This license, the Library General Public License, applies to some
+specially designated Free Software Foundation software, and to any
+other libraries whose authors decide to use it. You can use it for
+your libraries, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if
+you distribute copies of the library, or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link a program with the library, you must provide
+complete object files to the recipients so that they can relink them
+with the library, after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ Our method of protecting your rights has two steps: (1) copyright
+the library, and (2) offer you this license which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ Also, for each distributor's protection, we want to make certain
+that everyone understands that there is no warranty for this free
+library. If the library is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original
+version, so that any problems introduced by others will not reflect on
+the original authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that companies distributing free
+software will individually obtain patent licenses, thus in effect
+transforming the program into proprietary software. To prevent this,
+we have made it clear that any patent must be licensed for everyone's
+free use or not licensed at all.
+
+ Most GNU software, including some libraries, is covered by the ordinary
+GNU General Public License, which was designed for utility programs. This
+license, the GNU Library General Public License, applies to certain
+designated libraries. This license is quite different from the ordinary
+one; be sure to read it in full, and don't assume that anything in it is
+the same as in the ordinary license.
+
+ The reason we have a separate public license for some libraries is that
+they blur the distinction we usually make between modifying or adding to a
+program and simply using it. Linking a program with a library, without
+changing the library, is in some sense simply using the library, and is
+analogous to running a utility program or application program. However, in
+a textual and legal sense, the linked executable is a combined work, a
+derivative of the original library, and the ordinary General Public License
+treats it as such.
+
+ Because of this blurred distinction, using the ordinary General
+Public License for libraries did not effectively promote software
+sharing, because most developers did not use the libraries. We
+concluded that weaker conditions might promote sharing better.
+
+ However, unrestricted linking of non-free programs would deprive the
+users of those programs of all benefit from the free status of the
+libraries themselves. This Library General Public License is intended to
+permit developers of non-free programs to use free libraries, while
+preserving your freedom as a user of such programs to change the free
+libraries that are incorporated in them. (We have not seen how to achieve
+this as regards changes in header files, but we have achieved it as regards
+changes in the actual functions of the Library.) The hope is that this
+will lead to faster development of free libraries.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, while the latter only
+works together with the library.
+
+ Note that it is possible for a library to be covered by the ordinary
+General Public License rather than by this special one.
+
+ GNU LIBRARY GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library which
+contains a notice placed by the copyright holder or other authorized
+party saying it may be distributed under the terms of this Library
+General Public License (also called "this License"). Each licensee is
+addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+ 6. As an exception to the Sections above, you may also compile or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
+
+ c) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ d) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the source code distributed need not include anything that is normally
+distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded. In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Library General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Libraries
+
+ If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change. You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+ To apply these terms, attach the following notices to the library. It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the library's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+ <signature of Ty Coon>, 1 April 1990
+ Ty Coon, President of Vice
+
+That's all there is to it!
--- /dev/null
+
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL. It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+ This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it. You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations
+below.
+
+ When we speak of free software, we are referring to freedom of use,
+not price. Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+ To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights. These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ To protect each distributor, we want to make it very clear that
+there is no warranty for the free library. Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+\f
+ Finally, software patents pose a constant threat to the existence of
+any free program. We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder. Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+ Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License. This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License. We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+ When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library. The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom. The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+ We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License. It also provides other free software developers Less
+of an advantage over competing non-free programs. These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries. However, the Lesser license provides advantages in certain
+special circumstances.
+
+ For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it
+becomes a de-facto standard. To achieve this, non-free programs must
+be allowed to use the library. A more frequent case is that a free
+library does the same job as widely used non-free libraries. In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+ In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software. For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+ Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+\f
+ GNU LESSER GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control
+compilation and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+\f
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+\f
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+\f
+ 6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (1) uses at run time a
+ copy of the library already present on the user's computer system,
+ rather than copying library functions into the executable, and (2)
+ will operate properly with a modified version of the library, if
+ the user installs one, as long as the modified version is
+ interface-compatible with the version that the work was made with.
+
+ c) Accompany the work with a written offer, valid for at least
+ three years, to give the same user the materials specified in
+ Subsection 6a, above, for a charge no more than the cost of
+ performing this distribution.
+
+ d) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ e) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+\f
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+\f
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply, and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License
+may add an explicit geographical distribution limitation excluding those
+countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+\f
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+\f
+ How to Apply These Terms to Your New Libraries
+
+ If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change. You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms
+of the ordinary General Public License).
+
+ To apply these terms, attach the following notices to the library.
+It is safest to attach them to the start of each source file to most
+effectively convey the exclusion of warranty; and each file should
+have at least the "copyright" line and a pointer to where the full
+notice is found.
+
+
+ <one line to give the library's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or
+your school, if any, to sign a "copyright disclaimer" for the library,
+if necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ library `Frob' (a library for tweaking knobs) written by James
+ Random Hacker.
+
+ <signature of Ty Coon>, 1 April 1990
+ Ty Coon, President of Vice
+
+That's all there is to it!
+
+
--- /dev/null
+@PACKAGE_INIT@
+
+include(CMakeFindDependencyMacro)
+find_dependency(Qt5Core @REQUIRED_QT_VERSION@)
+
+@PACKAGE_SETUP_AUTOMOC_VARIABLES@
+
+if(CMAKE_CROSSCOMPILING AND KF5_HOST_TOOLING)
+ find_file(TARGETSFILE KF5CoreAddons/KF5CoreAddonsToolingTargets.cmake
+ PATHS ${KF5_HOST_TOOLING} ${CMAKE_CURRENT_LIST_DIR}
+ NO_DEFAULT_PATH
+ NO_CMAKE_FIND_ROOT_PATH)
+ include("${TARGETSFILE}")
+else()
+ include("${CMAKE_CURRENT_LIST_DIR}/KF5CoreAddonsToolingTargets.cmake")
+ if(CMAKE_CROSSCOMPILING AND DESKTOPTOJSON_EXECUTABLE)
+ set_target_properties(KF5::desktoptojson PROPERTIES IMPORTED_LOCATION_NONE ${DESKTOPTOJSON_EXECUTABLE})
+ set_target_properties(KF5::desktoptojson PROPERTIES IMPORTED_LOCATION ${DESKTOPTOJSON_EXECUTABLE})
+ endif()
+endif()
+include("${CMAKE_CURRENT_LIST_DIR}/KF5CoreAddonsTargets.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/KF5CoreAddonsMacros.cmake")
+@PACKAGE_INCLUDE_QCHTARGETS@
--- /dev/null
+#
+# kcoreaddons_desktop_to_json(target desktopfile
+# DEFAULT_SERVICE_TYPE | SERVICE_TYPES <file> [<file> [...]]
+# [OUTPUT_DIR dir] [COMPAT_MODE])
+#
+# This macro uses desktoptojson to generate a json file from a plugin
+# description in a .desktop file. The generated file can be compiled
+# into the plugin using the K_PLUGIN_FACTORY_WITH_JSON (cpp) macro.
+#
+# All files in SERVICE_TYPES will be parsed by desktoptojson to ensure that the generated
+# json uses the right data type (string, string list, int, double or bool) for all of the
+# properties. If your application does not have any custom properties defined you should pass
+# DEFAULT_SERVICE_TYPE instead. It is an error if neither of these arguments is given.
+# This is done in order to ensure that all applications explicitly choose the right service
+# type and don't have runtime errors because of the data being wrong (QJsonValue does not
+# perform any type conversions).
+#
+# If COMPAT_MODE is passed as an argument the generated JSON file will be compatible with
+# the metadata format used by KPluginInfo (from KService), otherwise it will default to
+# the new format that is used by KPluginMetaData (from KCoreAddons).
+#
+# If OUTPUT_DIR is set the generated file will be created inside <dir> instead of in
+# ${CMAKE_CURRENT_BINARY_DIR}
+#
+# Example:
+#
+# kcoreaddons_desktop_to_json(plasma_engine_time plasma-dataengine-time.desktop
+# SERVICE_TYPES plasma-dataengine.desktop)
+
+function(kcoreaddons_desktop_to_json target desktop)
+ get_filename_component(desktop_basename ${desktop} NAME_WE) # allow passing an absolute path to the .desktop
+ cmake_parse_arguments(DESKTOP_TO_JSON "COMPAT_MODE;DEFAULT_SERVICE_TYPE" "OUTPUT_DIR" "SERVICE_TYPES" ${ARGN})
+
+ if(DESKTOP_TO_JSON_OUTPUT_DIR)
+ set(json "${DESKTOP_TO_JSON_OUTPUT_DIR}/${desktop_basename}.json")
+ else()
+ set(json "${CMAKE_CURRENT_BINARY_DIR}/${desktop_basename}.json")
+ endif()
+
+ if(CMAKE_VERSION VERSION_LESS 2.8.12.20140127 OR "${target}" STREQUAL "")
+ _desktop_to_json_cmake28(${desktop} ${json} ${DESKTOP_TO_JSON_COMPAT_MODE})
+ return()
+ elseif(MSVC_IDE AND CMAKE_VERSION VERSION_LESS 3.0)
+ # autogen dependencies for visual studio generator are broken until cmake commit 2ed0d06
+ _desktop_to_json_cmake28(${desktop} ${json} ${DESKTOP_TO_JSON_COMPAT_MODE})
+ return()
+ endif()
+ set(command KF5::desktoptojson -i ${desktop} -o ${json})
+ if(DESKTOP_TO_JSON_COMPAT_MODE)
+ list(APPEND command -c)
+ endif()
+ if(DESKTOP_TO_JSON_SERVICE_TYPES)
+ foreach(type ${DESKTOP_TO_JSON_SERVICE_TYPES})
+ if (EXISTS ${KDE_INSTALL_FULL_KSERVICETYPES5DIR}/${type})
+ set(type ${KDE_INSTALL_FULL_KSERVICETYPES5DIR}/${type})
+ endif()
+ list(APPEND command -s ${type})
+ endforeach()
+ endif()
+
+ file(RELATIVE_PATH relativejson ${CMAKE_CURRENT_BINARY_DIR} ${json})
+ add_custom_command(
+ OUTPUT ${json}
+ COMMAND ${command}
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+ DEPENDS ${desktop}
+ COMMENT "Generating ${relativejson}"
+ )
+ set_property(TARGET ${target} APPEND PROPERTY AUTOGEN_TARGET_DEPENDS ${json})
+endfunction()
+
+function(_desktop_to_json_cmake28 desktop json compat)
+ # This function runs desktoptojson at *configure* time, ie, when CMake runs.
+ # This is necessary with CMake < 3.0.0 because the .json file must be
+ # generated before moc is run, and there was no way until CMake 3.0.0 to
+ # define a target as a dependency of the automoc target.
+ message("Using CMake 2.8 way to call desktoptojson")
+ get_target_property(DESKTOPTOJSON_LOCATION KF5::desktoptojson LOCATION)
+ if(compat)
+ execute_process(
+ COMMAND ${DESKTOPTOJSON_LOCATION} -i ${desktop} -o ${json} -c
+ RESULT_VARIABLE result
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+ )
+ else()
+ execute_process(
+ COMMAND ${DESKTOPTOJSON_LOCATION} -i ${desktop} -o ${json}
+ RESULT_VARIABLE result
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+ )
+ endif()
+
+ if (NOT result EQUAL 0)
+ message(FATAL_ERROR "Generating ${json} failed")
+ endif()
+endfunction()
+
+#
+# kcoreaddons_add_plugin(plugin_name SOURCES... [JSON "pluginname.json"] [INSTALL_NAMESPACE "servicename"])
+#
+# This macro helps simplifying the creation of plugins for KPluginFactory
+# based systems.
+# It will create a plugin given the SOURCES list, the name of the JSON file
+# that will define the plugin's metadata and the INSTALL_NAMESPACE so that
+# the plugin is installed with the rest of the plugins from the same sub-system,
+# within ${KDE_INSTALL_PLUGINDIR}.
+#
+# Example:
+# kcoreaddons_add_plugin(kdeconnect_share JSON kdeconnect_share.json SOURCES ${kdeconnect_share_SRCS})
+#
+# Since 5.10.0
+
+function(kcoreaddons_add_plugin plugin)
+ set(options)
+ set(oneValueArgs JSON INSTALL_NAMESPACE)
+ set(multiValueArgs SOURCES)
+ cmake_parse_arguments(KCA_ADD_PLUGIN "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
+
+ if(NOT KCA_ADD_PLUGIN_SOURCES)
+ message(FATAL_ERROR "kcoreaddons_add_plugin called without SOURCES parameter")
+ endif()
+ get_filename_component(json "${KCA_ADD_PLUGIN_JSON}" REALPATH)
+
+ add_library(${plugin} MODULE ${KCA_ADD_PLUGIN_SOURCES})
+ set_property(TARGET ${plugin} APPEND PROPERTY AUTOGEN_TARGET_DEPENDS ${json})
+ # If find_package(ECM 5.38) or higher is called, output the plugin in a INSTALL_NAMESPACE subfolder.
+ # See https://community.kde.org/Guidelines_and_HOWTOs/Making_apps_run_uninstalled
+ if(NOT ("${ECM_GLOBAL_FIND_VERSION}" VERSION_LESS "5.38.0"))
+ set_target_properties(${plugin} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${KCA_ADD_PLUGIN_INSTALL_NAMESPACE}")
+ endif()
+
+ if (NOT KCA_ADD_PLUGIN_INSTALL_NAMESPACE)
+ message(FATAL_ERROR "Must specify INSTALL_NAMESPACE for ${plugin}")
+ endif()
+ install(TARGETS ${plugin} DESTINATION ${KDE_INSTALL_PLUGINDIR}/${KCA_ADD_PLUGIN_INSTALL_NAMESPACE})
+endfunction()
--- /dev/null
+# KCoreAddons
+
+Qt addon library with a collection of non-GUI utilities
+
+## Introduction
+
+KCoreAddons provides classes built on top of QtCore to perform various tasks
+such as manipulating mime types, autosaving files, creating backup files,
+generating random sequences, performing text manipulations such as macro
+replacement, accessing user information and many more.
+
--- /dev/null
+include(ECMAddTests)
+include(ConfigureChecks.cmake) #configure checks for QFileSystemWatcher
+
+find_package(Qt5Test ${REQUIRED_QT_VERSION} CONFIG QUIET)
+
+if(NOT Qt5Test_FOUND)
+ message(STATUS "Qt5Test not found, autotests will not be built.")
+ return()
+endif()
+
+macro(build_plugin pname)
+ add_library(${pname} MODULE ${ARGN})
+ ecm_mark_as_test(${pname})
+ target_link_libraries(${pname} KF5::CoreAddons)
+endmacro()
+
+# Build some sample plugins
+build_plugin(jsonplugin jsonplugin.cpp)
+build_plugin(jsonplugin2 jsonplugin2.cpp)
+build_plugin(versionedplugin versionedplugin.cpp)
+build_plugin(unversionedplugin unversionedplugin.cpp)
+build_plugin(multiplugin multiplugin.cpp)
+build_plugin(alwaysunloadplugin alwaysunloadplugin.cpp)
+
+add_definitions( -DKDELIBS4CONFIGMIGRATOR_DATA_DIR="${CMAKE_CURRENT_SOURCE_DIR}/data" )
+
+ecm_add_tests(
+ kaboutdatatest.cpp
+ kaboutdataapplicationdatatest.cpp
+ kautosavefiletest.cpp
+ kcompositejobtest.cpp
+ kformattest.cpp
+ kjobtest.cpp
+ kpluginfactorytest.cpp
+ kpluginloadertest.cpp
+ kpluginmetadatatest.cpp
+ kprocesstest.cpp
+ krandomtest.cpp
+ kshareddatacachetest.cpp
+ kshelltest.cpp
+ kurlmimedatatest.cpp
+ kstringhandlertest.cpp
+ kusertest.cpp
+ kdelibs4migrationtest.cpp
+ kdelibs4configmigratortest.cpp
+ LINK_LIBRARIES Qt5::Test KF5::CoreAddons
+)
+
+if(NOT CMAKE_CROSSCOMPILING)
+ ecm_add_tests(desktoptojsontest.cpp LINK_LIBRARIES Qt5::Test KF5::CoreAddons)
+ target_compile_definitions(desktoptojsontest PRIVATE
+ DESKTOP_TO_JSON_EXE="$<TARGET_FILE:desktoptojson>"
+ )
+endif()
+
+set(ktexttohtmltest_SRCS ktexttohtmltest.cpp ${CMAKE_SOURCE_DIR}/src/lib/text/ktexttohtml.cpp)
+ecm_add_test(${ktexttohtmltest_SRCS} TEST_NAME ktexttohtmltest LINK_LIBRARIES Qt5::Test)
+# include the binary dir in order to get kcoreaddons_export.h
+target_include_directories(ktexttohtmltest PRIVATE ${KCoreAddons_BINARY_DIR}/src/lib)
+# fake static linking to prevent the export macros on Windows from kicking in
+target_compile_definitions(ktexttohtmltest PRIVATE -DKCOREADDONS_STATIC_DEFINE=1)
+
+target_compile_definitions(kpluginloadertest PRIVATE
+ JSONPLUGIN_FILE="$<TARGET_FILE:jsonplugin>"
+ VERSIONEDPLUGIN_FILE="$<TARGET_FILE:versionedplugin>"
+ UNVERSIONEDPLUGIN_FILE="$<TARGET_FILE:unversionedplugin>"
+ MULTIPLUGIN_FILE="$<TARGET_FILE:multiplugin>"
+ ALWAYSUNLOADPLUGIN_FILE="$<TARGET_FILE:alwaysunloadplugin>"
+)
+
+set(KDIRWATCH_BACKENDS_TO_TEST Stat)#Stat is always compiled
+
+if (HAVE_SYS_INOTIFY_H)
+ list(APPEND KDIRWATCH_BACKENDS_TO_TEST INotify)
+endif()
+
+if (HAVE_FAM)
+ list(APPEND KDIRWATCH_BACKENDS_TO_TEST Fam)
+endif()
+
+if (HAVE_QFILESYSTEMWATCHER)
+ list(APPEND KDIRWATCH_BACKENDS_TO_TEST QFSWatch)
+endif()
+
+foreach(_backendName ${KDIRWATCH_BACKENDS_TO_TEST})
+ string(TOLOWER ${_backendName} _lowercaseBackendName)
+ set(BACKEND_TEST_TARGET kdirwatch_${_lowercaseBackendName}_unittest)
+ add_executable(${BACKEND_TEST_TARGET} kdirwatch_unittest.cpp)
+ target_link_libraries(${BACKEND_TEST_TARGET} Qt5::Test KF5::CoreAddons)
+ ecm_mark_as_test(${BACKEND_TEST_TARGET})
+ add_test(NAME ${BACKEND_TEST_TARGET} COMMAND ${BACKEND_TEST_TARGET})
+ target_compile_definitions(${BACKEND_TEST_TARGET} PUBLIC -DKDIRWATCH_TEST_METHOD=\"${_backendName}\")
+endforeach()
--- /dev/null
+set(CMAKE_REQUIRED_LIBRARIES Qt5::Core)
+check_cxx_source_compiles(
+"#include <QtCore/QFileSystemWatcher>
+int main()
+{
+ QFileSystemWatcher *watcher = new QFileSystemWatcher();
+ delete watcher;
+ return 0;
+}" HAVE_QFILESYSTEMWATCHER)
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2013 Sebastian Kügler <sebas@kde.org>
+ * Copyright 2014 Alex Merry <alexmerry@kde.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License or (at your option) version 3 or any later version
+ * accepted by the membership of KDE e.V. (or its successor approved
+ * by the membership of KDE e.V.), which shall act as a proxy
+ * defined in Section 14 of version 3 of the license.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "alwaysunloadplugin.h"
+#include <kexportplugin.h>
+#include <kpluginfactory.h>
+#include <QDebug>
+
+AlwaysUnloadPlugin::AlwaysUnloadPlugin(QObject *parent, const QVariantList &args)
+ : QObject(parent)
+{
+ qDebug() << "Created AlwaysUnloadPlugin with args" << args;
+}
+
+K_PLUGIN_FACTORY(AlwaysUnloadPluginFactory, registerPlugin<AlwaysUnloadPlugin>();)
+
+#include "alwaysunloadplugin.moc"
--- /dev/null
+/*
+ * Copyright 2013 Sebastian Kügler <sebas@kde.org>
+ * Copyright 2014 Alex Merry <alexmerry@kde.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License or (at your option) version 3 or any later version
+ * accepted by the membership of KDE e.V. (or its successor approved
+ * by the membership of KDE e.V.), which shall act as a proxy
+ * defined in Section 14 of version 3 of the license.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#ifndef ALWAYSUNLOADPLUGIN_H
+#define ALWAYSUNLOADPLUGIN_H
+
+#include <QObject>
+
+class AlwaysUnloadPlugin : public QObject
+{
+ Q_OBJECT
+
+public:
+ AlwaysUnloadPlugin(QObject *parent, const QVariantList &args);
+};
+
+#endif // ALWAYSUNLOADPLUGIN_H
--- /dev/null
+[Desktop Entry]
+Name=NSA Plugin
+Name[ast]=Complementu NSA
+Name[bs]=NSA dodatak
+Name[ca]=Connector de la NSA
+Name[ca@valencia]=Connector de la NSA
+Name[cs]=Modul NSA
+Name[da]=NSA-plugin
+Name[de]=NSA-Modul
+Name[el]=NSA Plugin
+Name[en_GB]=NSA Plugin
+Name[es]=Complemento NSA
+Name[fi]=NSA-liitännäinen
+Name[gd]=Plugan NSA
+Name[gl]=Complemento de NSA
+Name[he]=תוסף NSA
+Name[hu]=NSA bővítmény
+Name[it]=Estensione NSA
+Name[ko]=NSA 플러그인
+Name[nb]=NSA programtillegg
+Name[nl]=NSA-plug-in
+Name[nn]=NSA-tillegg
+Name[pl]=Wtyczka NSA
+Name[pt]='Plugin' da NSA
+Name[pt_BR]=Plugin NSA
+Name[ru]=Модуль ФСБ
+Name[sk]=NSA plugin
+Name[sl]=Vstavek NSA
+Name[sr]=НСА‑ов прикључак
+Name[sr@ijekavian]=НСА‑ов прикључак
+Name[sr@ijekavianlatin]=NSA‑ov priključak
+Name[sr@latin]=NSA‑ov priključak
+Name[sv]=NSA-insticksprogram
+Name[tr]=NSA Eklentisi
+Name[uk]=Додаток NSA
+Name[x-test]=xxNSA Pluginxx
+Name[zh_CN]=NSA 插件
+Name[zh_TW]=NSA 外掛程式
+Comment=Test Plugin Spy
+Comment[ast]=Complementu de prueba qu'escluca
+Comment[bs]=Špijun provjere dodataka
+Comment[ca]=Connector de proves espia
+Comment[ca@valencia]=Connector de proves espia
+Comment[cs]=Testovací modul Spy
+Comment[da]=Test-plugin spion
+Comment[de]=Spionage-Testmodul
+Comment[el]=Test Plugin Spy
+Comment[en_GB]=Test Plugin Spy
+Comment[es]=Probar espía de complementos
+Comment[fi]=Testivakoiluliitännäinen
+Comment[gd]=Plugan deuchainneach brathadair
+Comment[gl]=Complemento espía de proba
+Comment[he]=בדיקת תוסף ריגול
+Comment[hu]=Kémbővítmény tesztelése
+Comment[it]=Estensione di prova Spy
+Comment[ko]=테스트 플러그인 첩자
+Comment[nb]=Test tilleggsspion
+Comment[nl]=Plug-in Spy testen
+Comment[nn]=Spion for test-tillegg
+Comment[pl]=Wypróbuj szpiega wtyczki
+Comment[pt]=Espião dos 'Plugins' de Testes
+Comment[pt_BR]=Plugin de teste de espionagem
+Comment[ru]=Тестовый прослушивающий модуль
+Comment[sk]=Testovací plugin špión
+Comment[sl]=Preizkusni vohunski vstavek
+Comment[sr]=Пробни прикључак шпијун
+Comment[sr@ijekavian]=Пробни прикључак шпијун
+Comment[sr@ijekavianlatin]=Probni priključak špijun
+Comment[sr@latin]=Probni priključak špijun
+Comment[sv]=Testa insticksprogramspion
+Comment[tr]=Test Eklenti Ajanı
+Comment[uk]=Тестовий додаток
+Comment[x-test]=xxTest Plugin Spyxx
+Comment[zh_CN]=Test Plugin Spy
+Comment[zh_TW]=測試外掛程式
+Type=Service
+Icon=preferences-system-time
+MimeType=image/png;application/pdf;
+
+X-KDE-ServiceTypes=KService/NSA
+X-KDE-Library=fakeplugin
+X-KDE-FormFactors=mediacenter,desktop
+X-KDE-PluginInfo-Author=Sebastian Kügler
+X-KDE-PluginInfo-Email=sebas@kde.org
+X-KDE-PluginInfo-Name=fakeplugin
+X-KDE-PluginInfo-Version=1.0
+X-KDE-PluginInfo-Website=https://kde.org/
+X-KDE-PluginInfo-Category=Examples
+X-KDE-PluginInfo-Depends=
+X-KDE-PluginInfo-License=LGPL
+X-KDE-PluginInfo-EnabledByDefault=true
--- /dev/null
+[Desktop Entry]
+Name=NSA Plugin
+Name[ast]=Complementu NSA
+Name[bs]=NSA dodatak
+Name[ca]=Connector de la NSA
+Name[ca@valencia]=Connector de la NSA
+Name[cs]=Modul NSA
+Name[da]=NSA-plugin
+Name[de]=NSA-Modul
+Name[el]=NSA Plugin
+Name[en_GB]=NSA Plugin
+Name[es]=Complemento NSA
+Name[fi]=NSA-liitännäinen
+Name[gd]=Plugan NSA
+Name[gl]=Complemento de NSA
+Name[he]=תוסף NSA
+Name[hu]=NSA bővítmény
+Name[it]=Estensione NSA
+Name[ko]=NSA 플러그인
+Name[nb]=NSA programtillegg
+Name[nl]=NSA-plug-in
+Name[nn]=NSA-tillegg
+Name[pl]=Wtyczka NSA
+Name[pt]='Plugin' da NSA
+Name[pt_BR]=Plugin NSA
+Name[ru]=Модуль ФСБ
+Name[sk]=NSA plugin
+Name[sl]=Vstavek NSA
+Name[sr]=НСА‑ов прикључак
+Name[sr@ijekavian]=НСА‑ов прикључак
+Name[sr@ijekavianlatin]=NSA‑ov priključak
+Name[sr@latin]=NSA‑ov priključak
+Name[sv]=NSA-insticksprogram
+Name[tr]=NSA Eklentisi
+Name[uk]=Додаток NSA
+Name[x-test]=xxNSA Pluginxx
+Name[zh_CN]=NSA 插件
+Name[zh_TW]=NSA 外掛程式
+Comment=Test Plugin Spy
+Comment[ast]=Complementu de prueba qu'escluca
+Comment[bs]=Špijun provjere dodataka
+Comment[ca]=Connector de proves espia
+Comment[ca@valencia]=Connector de proves espia
+Comment[cs]=Testovací modul Spy
+Comment[da]=Test-plugin spion
+Comment[de]=Spionage-Testmodul
+Comment[el]=Test Plugin Spy
+Comment[en_GB]=Test Plugin Spy
+Comment[es]=Probar espía de complementos
+Comment[fi]=Testivakoiluliitännäinen
+Comment[gd]=Plugan deuchainneach brathadair
+Comment[gl]=Complemento espía de proba
+Comment[he]=בדיקת תוסף ריגול
+Comment[hu]=Kémbővítmény tesztelése
+Comment[it]=Estensione di prova Spy
+Comment[ko]=테스트 플러그인 첩자
+Comment[nb]=Test tilleggsspion
+Comment[nl]=Plug-in Spy testen
+Comment[nn]=Spion for test-tillegg
+Comment[pl]=Wypróbuj szpiega wtyczki
+Comment[pt]=Espião dos 'Plugins' de Testes
+Comment[pt_BR]=Plugin de teste de espionagem
+Comment[ru]=Тестовый прослушивающий модуль
+Comment[sk]=Testovací plugin špión
+Comment[sl]=Preizkusni vohunski vstavek
+Comment[sr]=Пробни прикључак шпијун
+Comment[sr@ijekavian]=Пробни прикључак шпијун
+Comment[sr@ijekavianlatin]=Probni priključak špijun
+Comment[sr@latin]=Probni priključak špijun
+Comment[sv]=Testa insticksprogramspion
+Comment[tr]=Test Eklenti Ajanı
+Comment[uk]=Тестовий додаток
+Comment[x-test]=xxTest Plugin Spyxx
+Comment[zh_CN]=Test Plugin Spy
+Comment[zh_TW]=測試外掛程式
+Type=Service
+Icon=preferences-system-time
+Hidden=true
+
+X-KDE-ServiceTypes=KService/NSA
+X-KDE-Library=fakeplugin
+
+X-KDE-PluginInfo-Author=Sebastian Kügler
+X-KDE-PluginInfo-Email=sebas@kde.org
+X-KDE-PluginInfo-Name=fakeplugin
+X-KDE-PluginInfo-Version=1.0
+X-KDE-PluginInfo-Website=https://kde.org/
+X-KDE-PluginInfo-Category=Examples
+X-KDE-PluginInfo-Depends=
+X-KDE-PluginInfo-License=LGPL
+X-KDE-PluginInfo-EnabledByDefault=true
--- /dev/null
+[Desktop Entry]
+Name=Bad Groups
+Name[ca]=Grups dolents
+Name[ca@valencia]=Grups dolents
+Name[da]=Dårlige grupper
+Name[de]=Schlechte Gruppen
+Name[el]=Κακές ομάδες
+Name[en_GB]=Bad Groups
+Name[es]=Grupos incorrectos
+Name[fi]=Huonot ryhmät
+Name[gl]=Grupos malos
+Name[it]=Gruppi errati
+Name[ko]=불량 그룹
+Name[nl]=Foute groepen
+Name[pl]=Złe grupy
+Name[pt]=Grupos Inválidos
+Name[pt_BR]=Grupos inválidos
+Name[sk]=Zlé skupiny
+Name[sl]=Slabe skupine
+Name[sr]=Лоше групе
+Name[sr@ijekavian]=Лоше групе
+Name[sr@ijekavianlatin]=Loše grupe
+Name[sr@latin]=Loše grupe
+Name[sv]=Felaktiga grupper
+Name[uk]=Погані групи
+Name[x-test]=xxBad Groupsxx
+Name[zh_CN]=坏分组
+Type=Service
+# one value for every property definition in bad-groups-servicetype.desktop
+ThisIsOkay=10
+#empty
+=11
+#missing terminator
+MissingTerminator=12
+# empty and missing terminator
+=13
+# completely empty
+=14
+SomeOtherProperty=15
+# extra spaces in group name (should be okay)
+TrailingSpacesAreOkay=16
+#missing type
+MissingType=17
+InvalidType=18
+# ok again after invalid ones
+ThisIsOkayAgain=19
--- /dev/null
+[Desktop Entry]
+Type=ServiceType
+
+[PropertyDef::ThisIsOkay]
+Type=int
+# missing name
+[PropertyDef::]
+Type=int
+# missing terminator
+[PropertyDef::MissingTerminator
+Type=int
+# empty and missing terminator
+[PropertyDef::
+Type=int
+# completely empty group
+[
+Type=int
+# completely empty group
+[DoesNotStartWithPropertyDef::SomeOtherProperty]
+Type=int
+# extra spaces
+[PropertyDef::TrailingSpacesAreOkay ]
+Type=int
+
+# missing Type=key
+[PropertyDef::MissingType]
+NoType=int
+
+# invalid Type=key
+[PropertyDef::InvalidType]
+Type=integer
+
+[PropertyDef::ThisIsOkayAgain]
+Type=int
--- /dev/null
+[Desktop Entry]
+Type=ServiceType
+
+[PropertyDef::X-Test-Bool]
+Type=bool
+
--- /dev/null
+[Desktop Entry]
+Name=Example
+Name[ca]=Exemple
+Name[ca@valencia]=Exemple
+Name[da]=Eksempel
+Name[de]=Beispiel
+Name[el]=Παράδειγμα
+Name[en_GB]=Example
+Name[es]=Ejemplo
+Name[fi]=Esimerkki
+Name[gl]=Exemplo
+Name[it]=Esempio
+Name[ko]=예제
+Name[nb]=Eksempel
+Name[nl]=Voorbeeld
+Name[pl]=Przykład
+Name[pt]=Exemplo
+Name[pt_BR]=Exemplo
+Name[sk]=Príklad
+Name[sl]=Primer
+Name[sr]=Пример
+Name[sr@ijekavian]=Пример
+Name[sr@ijekavianlatin]=Primer
+Name[sr@latin]=Primer
+Name[sv]=Exempel
+Name[uk]=Приклад
+Name[x-test]=xxExamplexx
+Name[zh_CN]=例子
+Type=Service
+X-KDE-ServiceTypes=foo/bar,bar/foo
+X-Test-Integer=42
+X-Test-Double=42.42
+X-Test-List=a,b,c,def
+X-Test-String=foobar
+X-Test-Bool=true
+# not defined -> string
+X-Test-Unknown=true
+# QSize not supported -> string
+X-Test-Size=10,20
--- /dev/null
+[Desktop Entry]
+Type=ServiceType
+#Name=Sample
+
+[PropertyDef::X-Test-Integer]
+Type=int
+[PropertyDef::X-Test-Double]
+Type=double
+[PropertyDef::X-Test-Bool]
+Type=bool
+[PropertyDef::X-Test-List]
+Type=QStringList
+[PropertyDef::X-Test-String]
+Type=QString
+# this is not supported -> should not convert
+# was used by KDE4 plasma-applet.desktop but that is no longer the case
+[PropertyDef::X-Test-Size]
+Type=QSize
--- /dev/null
+[Desktop Entry]
+Type=ServiceType
+X-KDE-ServiceType=KDEDModule
+[PropertyDef::X-KDE-FactoryName]
+Type=QString
+[PropertyDef::X-KDE-Kded-autoload]
+Type=bool
+[PropertyDef::X-KDE-Kded-load-on-demand]
+Type=bool
--- /dev/null
+# this is a copy of kdevelopplugin.desktop as an example of a real service type definition
+
+[Desktop Entry]
+Type=ServiceType
+X-KDE-ServiceType=KDevelop/NonExistentPlugin
+X-KDE-Derived=KPluginInfo
+#Name=KDevelop Plugin
+
+# mandatory, versioning - prevent DLL hell
+[PropertyDef::X-KDevelop-Version]
+Type=int
+
+# optional, determines whether a plugin is loaded only after
+# a project is opened, or is a global plugin.
+# If it is not set, the plugin can only be loaded by the
+# user or via requesting one of its dependencies
+# allowed values: Global, Project
+[PropertyDef::X-KDevelop-Category]
+Type=QString
+
+# mandatory, GUI-Operation Mode, determines whether a plugin
+# can work without having a mainwindow/partcontroller
+# running
+# allowed values: GUI, NoGUI
+[PropertyDef::X-KDevelop-Mode]
+Type=QString
+
+# optional, Arguments to pass to the plugin
+[PropertyDef::X-KDevelop-Args]
+Type=QString
+
+# optional, Interfaces that a plugin implements
+# usually values start with org.kdevelop
+[PropertyDef::X-KDevelop-Interfaces]
+Type=QStringList
+
+# optional, interfaces that this plugin depends
+# on
+[PropertyDef::X-KDevelop-IRequired]
+Type=QStringList
+
+# optional, interfaces that this plugin can use,
+# but the plugin still works if the interfaces are
+# not available.
+[PropertyDef::X-KDevelop-IOptional]
+Type=QStringList
+
+# optional, mimetypes supported by a language plugin
+[PropertyDef::X-KDevelop-SupportedMimeTypes]
+Type=QStringList
+
+# optional, language supported by a language plugin
+[PropertyDef::X-KDevelop-Language]
+Type=QString
+
+# optional, defines whether the plugin can be disabled
+# by the user. Possible values are "AlwaysOn" and "UserSelectable".
+# If the property is missing then UserSelectable is assumed
+[PropertyDef::X-KDevelop-LoadMode]
+Type=QString
+
+# optional, list of filters for "projectfiles" for the project plugin
+# For example: Makefile,Makefile.* for Makefile's
+[PropertyDef::X-KDevelop-ProjectFilesFilter]
+Type=QStringList
+
+# optional, description for the projectfiles filter
+[PropertyDef::X-KDevelop-ProjectFilesFilterDescription]
+Type=QString
+
--- /dev/null
+[Desktop Entry]
+# Type must be ServiceType otherwise this file is invalid
+Type=Service
+
+# as this file is invalid check that this property is not converted
+[PropertyDef::ShouldNotBeConvertedToInt]
+Type=int
--- /dev/null
+{
+ "KPlugin": {
+ "Authors": [
+ {
+ "Name": "Aleix Pol"
+ }
+ ],
+ "Description": "Test stuff.",
+ "Icon": "kdevelop",
+ "License": "GPL",
+ "Name": "Test"
+ },
+ "X-Plasma-MainScript": "ui/main.qml",
+ "X-Purpose-PluginTypes": [ "Export" ]
+}
--- /dev/null
+[Desktop Entry]
+Name=Parse Test
+Comment=Two Steps Parsing Test
+Type=Service
+Icon=preferences-system-time
+MimeType=image/png;application/pdf;
+
+X-Test-List=first,second
+X-KDE-ServiceTypes=example/servicetype
+X-KDE-Library=fakeplugin
+X-KDE-FormFactors=mediacenter,desktop
+X-KDE-PluginInfo-Author=Sebastian Kügler
+X-KDE-PluginInfo-Email=sebas@kde.org
+X-KDE-PluginInfo-Name=fakeplugin
+X-KDE-PluginInfo-Version=1.0
+X-KDE-PluginInfo-Website=https://kde.org/
+X-KDE-PluginInfo-Category=Examples
+X-KDE-PluginInfo-Depends=
+X-KDE-PluginInfo-License=LGPL
+X-KDE-PluginInfo-EnabledByDefault=true
--- /dev/null
+/* This file is part of the KDE project
+ Copyright (C) 2014 Alex Richardson <arichardson.kde@gmail.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include <QObject>
+#include <QProcess>
+#include <QTemporaryFile>
+#include <QTest>
+#include <QDebug>
+#include <QJsonDocument>
+#include <QJsonObject>
+#include <QJsonArray>
+
+namespace QTest
+{
+
+template<> inline char *toString(const QJsonValue &val)
+{
+ // simply reuse the QDebug representation
+ QString result;
+ QDebug(&result) << val;
+ return QTest::toString(result);
+}
+
+}
+
+class DesktopToJsonTest : public QObject
+{
+ Q_OBJECT
+
+private:
+ void compareJson(const QJsonObject& actual, const QJsonObject& expected) {
+ for (auto it = actual.constBegin(); it != actual.constEnd(); ++it) {
+ if (expected.constFind(it.key()) == expected.constEnd()) {
+ qCritical() << "Result has key" << it.key() << "which is not expected!";
+ QFAIL("Invalid output");
+ }
+ if (it.value().isObject() && expected.value(it.key()).isObject()) {
+ compareJson(it.value().toObject(), expected.value(it.key()).toObject());
+ } else {
+ QCOMPARE(it.value(), expected.value(it.key()));
+ }
+ }
+ for (auto it = expected.constBegin(); it != expected.constEnd(); ++it) {
+ if (actual.constFind(it.key()) == actual.constEnd()) {
+ qCritical() << "Result is missing key" << it.key();
+ QFAIL("Invalid output");
+ }
+ if (it.value().isObject() && actual.value(it.key()).isObject()) {
+ compareJson(it.value().toObject(), actual.value(it.key()).toObject());
+ } else {
+ QCOMPARE(it.value(), actual.value(it.key()));
+ }
+ }
+ }
+
+private Q_SLOTS:
+
+ void testDesktopToJson_data()
+ {
+ QTest::addColumn<QByteArray>("input");
+ QTest::addColumn<QJsonObject>("expectedResult");
+ QTest::addColumn<bool>("compatibilityMode");
+ QTest::addColumn<QStringList>("serviceTypes");
+
+ QJsonObject expectedResult;
+ QJsonObject kpluginObj;
+ QByteArray input =
+ // include an insignificant group
+ "[Some Group]\n"
+ "Foo=Bar\n"
+ "\n"
+ "[Desktop Entry]\n"
+ // only data inside [Desktop Entry] should be included
+ "Name=Example\n"
+ //empty lines
+ "\n"
+ " \n"
+ // make sure translations are included:
+ "Name[de_DE]=Beispiel\n"
+ // ignore comments:
+ "#Comment=Comment\n"
+ " #Comment=Comment\n"
+ "Categories=foo;bar;a\\;b\n"
+ // As the case is significant, the keys Name and NAME are not equivalent:
+ "CaseSensitive=ABC\n"
+ "CASESENSITIVE=abc\n"
+ // Space before and after the equals sign should be ignored:
+ "SpacesBeforeEq =foo\n"
+ "SpacesAfterEq= foo\n"
+ // Space before and after the equals sign should be ignored; the = sign is the actual delimiter.
+ // TODO: error in spec (spaces before and after the key??)
+ " SpacesBeforeKey=foo\n"
+ "SpacesAfterKey =foo\n"
+ // ignore trailing spaces
+ "TrailingSpaces=foo \n"
+ // However spaces in the value are significant:
+ "SpacesInValue=Hello, World!\n"
+ // The escape sequences \s, \n, \t, \r, and \\ are supported for values of
+ // type string and localestring, meaning ASCII space, newline, tab,
+ // carriage return, and backslash, respectively:
+ "EscapeSequences=So\\sme esc\\nap\\te se\\\\qu\\re\\\\nces\n" // make sure that the last n is a literal n not a newline!
+ // the standard keys that are used by plugins, make sure correct types are used:
+ "X-KDE-PluginInfo-Category=Examples\n" // string key
+ "X-KDE-PluginInfo-Version=1.0\n"
+ // The multiple values should be separated by a semicolon and the value of the key
+ // may be optionally terminated by a semicolon. Trailing empty strings must always
+ // be terminated with a semicolon. Semicolons in these values need to be escaped using \;.
+ "X-KDE-PluginInfo-Depends=foo,bar,esc\\,aped\n" // string list key
+ "X-KDE-ServiceTypes=\n" // empty string list
+ "X-KDE-PluginInfo-EnabledByDefault=true\n" // bool key
+ // now start a new group
+ "[New Group]\n"
+ "InWrongGroup=true\n";
+
+ expectedResult[QStringLiteral("Categories")] = QStringLiteral("foo;bar;a\\;b");
+ expectedResult[QStringLiteral("CaseSensitive")] = QStringLiteral("ABC");
+ expectedResult[QStringLiteral("CASESENSITIVE")] = QStringLiteral("abc");
+ expectedResult[QStringLiteral("SpacesBeforeEq")] = QStringLiteral("foo");
+ expectedResult[QStringLiteral("SpacesAfterEq")] = QStringLiteral("foo");
+ expectedResult[QStringLiteral("SpacesBeforeKey")] = QStringLiteral("foo");
+ expectedResult[QStringLiteral("SpacesAfterKey")] = QStringLiteral("foo");
+ expectedResult[QStringLiteral("TrailingSpaces")] = QStringLiteral("foo");
+ expectedResult[QStringLiteral("SpacesInValue")] = QStringLiteral("Hello, World!");
+ expectedResult[QStringLiteral("EscapeSequences")] = QStringLiteral("So me esc\nap\te se\\qu\re\\nces");
+ kpluginObj[QStringLiteral("Name")] = QStringLiteral("Example");
+ kpluginObj[QStringLiteral("Name[de_DE]")] = QStringLiteral("Beispiel");
+ kpluginObj[QStringLiteral("Category")] = QStringLiteral("Examples");
+ kpluginObj[QStringLiteral("Dependencies")] = QJsonArray::fromStringList
+ (QStringList() << QStringLiteral("foo") << QStringLiteral("bar") << QStringLiteral("esc,aped"));
+ kpluginObj[QStringLiteral("ServiceTypes")] = QJsonArray::fromStringList(QStringList());
+ kpluginObj[QStringLiteral("EnabledByDefault")] = true;
+ kpluginObj[QStringLiteral("Version")] = QStringLiteral("1.0");
+ QJsonObject compatResult = expectedResult;
+ compatResult[QStringLiteral("Name")] = QStringLiteral("Example");
+ compatResult[QStringLiteral("Name[de_DE]")] = QStringLiteral("Beispiel");
+ compatResult[QStringLiteral("X-KDE-PluginInfo-Category")] = QStringLiteral("Examples");
+ compatResult[QStringLiteral("X-KDE-PluginInfo-Version")] = QStringLiteral("1.0");
+ compatResult[QStringLiteral("X-KDE-PluginInfo-Depends")] = QJsonArray::fromStringList
+ (QStringList() << QStringLiteral("foo") << QStringLiteral("bar") << QStringLiteral("esc,aped"));
+ compatResult[QStringLiteral("X-KDE-ServiceTypes")] = QJsonArray::fromStringList(QStringList());
+ compatResult[QStringLiteral("X-KDE-PluginInfo-EnabledByDefault")] = true;
+
+ expectedResult[QStringLiteral("KPlugin")] = kpluginObj;
+
+ QTest::newRow("newFormat") << input << expectedResult << false << QStringList();
+ QTest::newRow("compatFormat") << input << compatResult << true << QStringList();
+
+
+ // test conversion of a currently existing .desktop file (excluding most of the translations):
+ QByteArray kdevInput =
+ "[Desktop Entry]\n"
+ "Type = Service\n"
+ "Icon=text-x-c++src\n"
+ "Exec=blubb\n"
+ "Comment=C/C++ Language Support\n"
+ "Comment[fr]=Prise en charge du langage C/C++\n"
+ "Comment[it]=Supporto al linguaggio C/C++\n"
+ "Name=C++ Support\n"
+ "Name[fi]=C++-tuki\n"
+ "Name[fr]=Prise en charge du C++\n"
+ "GenericName=Language Support\n"
+ "GenericName[sl]=Podpora jeziku\n"
+ "ServiceTypes=KDevelop/NonExistentPlugin\n"
+ "X-KDE-Library=kdevcpplanguagesupport\n"
+ "X-KDE-PluginInfo-Name=kdevcppsupport\n"
+ "X-KDE-PluginInfo-Category=Language Support\n"
+ "X-KDevelop-Version=1\n"
+ "X-KDevelop-Language=C++\n"
+ "X-KDevelop-Args=CPP\n"
+ "X-KDevelop-Interfaces=ILanguageSupport\n"
+ "X-KDevelop-SupportedMimeTypes=text/x-chdr,text/x-c++hdr,text/x-csrc,text/x-c++src\n"
+ "X-KDevelop-Mode=NoGUI\n"
+ "X-KDevelop-LoadMode=AlwaysOn";
+
+ QJsonParseError e;
+ QJsonObject kdevExpected = QJsonDocument::fromJson("{\n"
+ " \"GenericName\": \"Language Support\",\n"
+ " \"GenericName[sl]\": \"Podpora jeziku\",\n"
+ " \"KPlugin\": {\n"
+ " \"Category\": \"Language Support\",\n"
+ " \"Description\": \"C/C++ Language Support\",\n"
+ " \"Description[fr]\": \"Prise en charge du langage C/C++\",\n"
+ " \"Description[it]\": \"Supporto al linguaggio C/C++\",\n"
+ " \"Icon\": \"text-x-c++src\",\n"
+ " \"Id\": \"kdevcppsupport\",\n"
+ " \"Name\": \"C++ Support\",\n"
+ " \"Name[fi]\": \"C++-tuki\",\n"
+ " \"Name[fr]\": \"Prise en charge du C++\",\n"
+ " \"ServiceTypes\": [ \"KDevelop/NonExistentPlugin\" ]\n"
+ " },\n"
+ " \"X-KDevelop-Args\": \"CPP\",\n"
+ " \"X-KDevelop-Interfaces\": \"ILanguageSupport\",\n"
+ " \"X-KDevelop-Language\": \"C++\",\n"
+ " \"X-KDevelop-LoadMode\": \"AlwaysOn\",\n"
+ " \"X-KDevelop-Mode\": \"NoGUI\",\n"
+ " \"X-KDevelop-SupportedMimeTypes\": \"text/x-chdr,text/x-c++hdr,text/x-csrc,text/x-c++src\",\n"
+ " \"X-KDevelop-Version\": \"1\"\n"
+ "}\n", &e).object();
+ QCOMPARE(e.error, QJsonParseError::NoError);
+ QTest::newRow("kdevcpplanguagesupport no servicetype") << kdevInput << kdevExpected << false << QStringList();
+
+ QJsonObject kdevExpectedWithServiceType = QJsonDocument::fromJson("{\n"
+ " \"GenericName\": \"Language Support\",\n"
+ " \"GenericName[sl]\": \"Podpora jeziku\",\n"
+ " \"KPlugin\": {\n"
+ " \"Category\": \"Language Support\",\n"
+ " \"Description\": \"C/C++ Language Support\",\n"
+ " \"Description[fr]\": \"Prise en charge du langage C/C++\",\n"
+ " \"Description[it]\": \"Supporto al linguaggio C/C++\",\n"
+ " \"Icon\": \"text-x-c++src\",\n"
+ " \"Id\": \"kdevcppsupport\",\n"
+ " \"Name\": \"C++ Support\",\n"
+ " \"Name[fi]\": \"C++-tuki\",\n"
+ " \"Name[fr]\": \"Prise en charge du C++\",\n"
+ " \"ServiceTypes\": [ \"KDevelop/NonExistentPlugin\" ]\n"
+ " },\n"
+ " \"X-KDevelop-Args\": \"CPP\",\n"
+ " \"X-KDevelop-Interfaces\": [\"ILanguageSupport\"],\n"
+ " \"X-KDevelop-Language\": \"C++\",\n"
+ " \"X-KDevelop-LoadMode\": \"AlwaysOn\",\n"
+ " \"X-KDevelop-Mode\": \"NoGUI\",\n"
+ " \"X-KDevelop-SupportedMimeTypes\": [\"text/x-chdr\", \"text/x-c++hdr\", \"text/x-csrc\", \"text/x-c++src\"],\n"
+ " \"X-KDevelop-Version\": 1\n"
+ "}\n", &e).object();
+ QCOMPARE(e.error, QJsonParseError::NoError);
+ const QString kdevServiceTypePath = QFINDTESTDATA("data/servicetypes/fake-kdevelopplugin.desktop");
+ QVERIFY(!kdevServiceTypePath.isEmpty());
+ QTest::newRow("kdevcpplanguagesupport with servicetype") << kdevInput << kdevExpectedWithServiceType
+ << false << QStringList(kdevServiceTypePath);
+ // test conversion of the X-KDE-PluginInfo-Author + X-KDE-PluginInfo-Email key:
+ QByteArray authorInput =
+ "[Desktop Entry]\n"
+ "Type=Service\n"
+ "X-KDE-PluginInfo-Author=Foo Bar\n"
+ "X-KDE-PluginInfo-Email=foo.bar@baz.com\n";
+
+ QJsonObject authorsExpected = QJsonDocument::fromJson("{\n"
+ " \"KPlugin\": {\n"
+ " \"Authors\": [ { \"Name\": \"Foo Bar\", \"Email\": \"foo.bar@baz.com\" } ]\n"
+ " }\n }\n", &e).object();
+ QCOMPARE(e.error, QJsonParseError::NoError);
+ QTest::newRow("authors") << authorInput << authorsExpected << false << QStringList();
+
+ // test case-insensitive conversion of boolean keys
+ const QString boolServiceType = QFINDTESTDATA("data/servicetypes/bool-servicetype.desktop");
+ QVERIFY(!boolServiceType.isEmpty());
+
+ QByteArray boolInput1 = "[Desktop Entry]\nType=Service\nX-Test-Bool=true\n";
+ QByteArray boolInput2 = "[Desktop Entry]\nType=Service\nX-Test-Bool=TRue\n";
+ QByteArray boolInput3 = "[Desktop Entry]\nType=Service\nX-Test-Bool=false\n";
+ QByteArray boolInput4 = "[Desktop Entry]\nType=Service\nX-Test-Bool=FALse\n";
+
+ auto boolResultTrue = QJsonDocument::fromJson("{\"KPlugin\":{},\"X-Test-Bool\": true}", &e).object();
+ QCOMPARE(e.error, QJsonParseError::NoError);
+ auto boolResultFalse = QJsonDocument::fromJson("{\"KPlugin\":{},\"X-Test-Bool\": false}", &e).object();
+ QCOMPARE(e.error, QJsonParseError::NoError);
+ QTest::newRow("bool true") << boolInput1 << boolResultTrue << false << QStringList(boolServiceType);
+ QTest::newRow("bool TRue") << boolInput2 << boolResultTrue << false << QStringList(boolServiceType);
+ QTest::newRow("bool false") << boolInput3 << boolResultFalse << false << QStringList(boolServiceType);
+ QTest::newRow("bool FALse") << boolInput4 << boolResultFalse << false << QStringList(boolServiceType);
+
+ // test conversion of kcookiejar.desktop (for some reason the wrong boolean values were committed)
+ QByteArray kcookiejarInput =
+ "[Desktop Entry]\n"
+ "Type= Service\n"
+ "Name=Cookie Jar\n"
+ "Comment=Stores network cookies\n"
+ "X-KDE-ServiceTypes=KDEDModule\n"
+ "X-KDE-Library=kf5/kded/kcookiejar\n"
+ "X-KDE-Kded-autoload=false\n"
+ "X-KDE-Kded-load-on-demand=true\n";
+ auto kcookiejarResult = QJsonDocument::fromJson(
+ "{\n"
+ " \"KPlugin\": {\n"
+ " \"Description\": \"Stores network cookies\",\n"
+ " \"Name\": \"Cookie Jar\",\n"
+ " \"ServiceTypes\": [\n"
+ " \"KDEDModule\"\n"
+ " ]\n"
+ " },\n"
+ "\"X-KDE-Kded-autoload\": false,\n"
+ "\"X-KDE-Kded-load-on-demand\": true\n"
+ "}\n", &e).object();
+ const QString kdedmoduleServiceType = QFINDTESTDATA("data/servicetypes/fake-kdedmodule.desktop");
+ QVERIFY(!kdedmoduleServiceType.isEmpty());
+ QTest::newRow("kcookiejar") << kcookiejarInput << kcookiejarResult << false << QStringList(kdedmoduleServiceType);
+
+
+ }
+
+ void testDesktopToJson()
+ {
+ QTemporaryFile output;
+ QTemporaryFile inputFile;
+ QVERIFY(inputFile.open());
+ QVERIFY(output.open()); // create the file
+ QFETCH(QByteArray, input);
+ QFETCH(QJsonObject, expectedResult);
+ QFETCH(bool, compatibilityMode);
+ QFETCH(QStringList, serviceTypes);
+ output.close();
+ inputFile.write(input);
+ inputFile.flush();
+ inputFile.close();
+ qDebug() << expectedResult;
+
+
+ QProcess proc;
+ proc.setProgram(QStringLiteral(DESKTOP_TO_JSON_EXE));
+ QStringList arguments = QStringList() << QStringLiteral("-i") << inputFile.fileName() << QStringLiteral("-o") << output.fileName();
+ if (compatibilityMode) {
+ arguments << QStringLiteral("-c");
+ }
+ foreach(const QString &s, serviceTypes) {
+ arguments << QStringLiteral("-s") << s;
+ }
+ proc.setArguments(arguments);
+ proc.start();
+ QVERIFY(proc.waitForFinished(10000));
+ qDebug() << "desktoptojson STDOUT: " << proc.readAllStandardOutput().data();
+ QByteArray errorOut = proc.readAllStandardError();
+ if (!errorOut.isEmpty()) {
+ qWarning().nospace() << "desktoptojson STDERR:\n\n" << errorOut.constData() << "\n";
+ }
+ QCOMPARE(proc.exitCode(), 0);
+ QVERIFY(output.open());
+ QByteArray jsonString = output.readAll();
+ qDebug() << "result: " << jsonString;
+ QJsonParseError e;
+ QJsonDocument doc = QJsonDocument::fromJson(jsonString, &e);
+ QCOMPARE(e.error, QJsonParseError::NoError);
+ QJsonObject result = doc.object();
+ compareJson(result, expectedResult);
+ QVERIFY(!QTest::currentTestFailed());
+ }
+};
+
+QTEST_MAIN(DesktopToJsonTest)
+
+#include "desktoptojsontest.moc"
--- /dev/null
+/*
+ * Copyright 2013 Sebastian Kügler <sebas@kde.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License or (at your option) version 3 or any later version
+ * accepted by the membership of KDE e.V. (or its successor approved
+ * by the membership of KDE e.V.), which shall act as a proxy
+ * defined in Section 14 of version 3 of the license.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "jsonplugin.h"
+#include <kpluginfactory.h>
+#include <QDebug>
+
+JsonPlugin::JsonPlugin(QObject *parent, const QVariantList &args)
+ : QObject(parent)
+{
+ Q_UNUSED(args)
+}
+
+K_PLUGIN_FACTORY_WITH_JSON(jsonpluginfa, "jsonplugin.json", registerPlugin<JsonPlugin>();)
+
+#include "jsonplugin.moc"
--- /dev/null
+/*
+ * Copyright 2013 Sebastian Kügler <sebas@kde.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License or (at your option) version 3 or any later version
+ * accepted by the membership of KDE e.V. (or its successor approved
+ * by the membership of KDE e.V.), which shall act as a proxy
+ * defined in Section 14 of version 3 of the license.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#ifndef JSONPLUGIN_H
+#define JSONPLUGIN_H
+
+#include <QObject>
+
+class JsonPlugin : public QObject
+{
+ Q_OBJECT
+
+public:
+ explicit JsonPlugin(QObject *parent, const QVariantList &args);
+};
+
+#endif // JSONPLUGIN_H
--- /dev/null
+{
+ "KPlugin": {
+ "Description": "This is a plugin",
+ "Description[nl]": "Dit is een plug-in",
+ "Description[pt]": "Isto é um 'plugin'",
+ "Description[pt_BR]": "Isto é um plugin",
+ "Description[sv]": "Det här är ett insticksprogram",
+ "Description[uk]": "Це додаток",
+ "Description[x-test]": "xxThis is a pluginxx"
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2013 Sebastian Kügler <sebas@kde.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License or (at your option) version 3 or any later version
+ * accepted by the membership of KDE e.V. (or its successor approved
+ * by the membership of KDE e.V.), which shall act as a proxy
+ * defined in Section 14 of version 3 of the license.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "jsonplugin2.h"
+#include <kpluginfactory.h>
+#include <QDebug>
+
+JsonPlugin2::JsonPlugin2(QObject *parent, const QVariantList &args)
+ : QObject(parent)
+{
+ Q_UNUSED(args)
+}
+
+K_PLUGIN_FACTORY_WITH_JSON(jsonplugin2, "jsonplugin2.json", registerPlugin<JsonPlugin2>();)
+
+#include "jsonplugin2.moc"
--- /dev/null
+/*
+ * Copyright 2013 Sebastian Kügler <sebas@kde.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License or (at your option) version 3 or any later version
+ * accepted by the membership of KDE e.V. (or its successor approved
+ * by the membership of KDE e.V.), which shall act as a proxy
+ * defined in Section 14 of version 3 of the license.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#ifndef JSONPLUGIN2_H
+#define JSONPLUGIN2_H
+
+#include <QObject>
+
+class JsonPlugin2 : public QObject
+{
+ Q_OBJECT
+
+public:
+ explicit JsonPlugin2(QObject *parent, const QVariantList &args);
+};
+
+#endif // JSONPLUGIN_H
--- /dev/null
+{
+ "KPlugin": {
+ "Description": "This is another plugin",
+ "Description[nl]": "Dit is een andere plug-in",
+ "Description[pt]": "Este é outro 'plugin'",
+ "Description[pt_BR]": "Isto é outro plugin",
+ "Description[sv]": "Det här är ännu ett insticksprogram",
+ "Description[uk]": "Це інший додаток",
+ "Description[x-test]": "xxThis is another pluginxx",
+ "Id": "foobar"
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2016 Friedrich W. H. Kossebau <kossebau@kde.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License version 2 as published by the Free Software Foundation;
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+// test object
+#include <kaboutdata.h>
+// Qt
+#include <QObject>
+#include <QTest>
+
+// Separate test for reading & setting applicationData
+// to ensure a separate process where no other test case has
+// directly or indirectly called KAboutData::setApplicationData before
+// and thus created the global KAboutData object
+class KAboutDataApplicationDataTest : public QObject
+{
+ Q_OBJECT
+
+private Q_SLOTS:
+ void testInteractionWithQApplicationData();
+};
+
+
+static const char AppName[] = "app";
+static const char ProgramName[] = "ProgramName";
+static const char Version[] = "Version";
+static const char OrganizationDomain[] = "no.where";
+static const char DesktopFileName[] = "org.kde.someapp";
+
+static const char AppName2[] = "otherapp";
+static const char ProgramName2[] = "OtherProgramName";
+static const char Version2[] = "OtherVersion";
+static const char OrganizationDomain2[] = "other.no.where";
+static const char DesktopFileName2[] = "org.kde.otherapp";
+
+void KAboutDataApplicationDataTest::testInteractionWithQApplicationData()
+{
+ // init the app metadata the Qt way
+ QCoreApplication *app = QCoreApplication::instance();
+ app->setApplicationName(QLatin1String(AppName));
+ app->setProperty("applicationDisplayName", QLatin1String(ProgramName));
+ app->setApplicationVersion(QLatin1String(Version));
+ app->setOrganizationDomain(QLatin1String(OrganizationDomain));
+ app->setProperty("desktopFileName", QLatin1String(DesktopFileName));
+
+ // without setting before, get KAboutData::applicationData
+ const KAboutData applicationAboutData = KAboutData::applicationData();
+
+ // should be initialized with Q*Application metadata
+ QCOMPARE(applicationAboutData.componentName(), QLatin1String(AppName));
+ QCOMPARE(applicationAboutData.displayName(), QLatin1String(ProgramName));
+ QCOMPARE(applicationAboutData.organizationDomain(), QLatin1String(OrganizationDomain));
+ QCOMPARE(applicationAboutData.version(), QLatin1String(Version));
+ QCOMPARE(applicationAboutData.desktopFileName(), QLatin1String(DesktopFileName));
+
+ // now set some new KAboutData, with different values
+ KAboutData aboutData2(QString::fromLatin1(AppName2), QString::fromLatin1(ProgramName2), QString::fromLatin1(Version2));
+ aboutData2.setOrganizationDomain(OrganizationDomain2);
+ aboutData2.setDesktopFileName(QLatin1String(DesktopFileName2));
+
+ KAboutData::setApplicationData(aboutData2);
+
+ // check that Q*Application metadata has been updated, as expected per API definition
+ QCOMPARE(app->applicationName(), QLatin1String(AppName2));
+ QCOMPARE(app->property("applicationDisplayName").toString(), QLatin1String(ProgramName2));
+ QCOMPARE(app->organizationDomain(), QLatin1String(OrganizationDomain2));
+ QCOMPARE(app->applicationVersion(), QLatin1String(Version2));
+ QCOMPARE(app->property("desktopFileName").toString(), QLatin1String(DesktopFileName2));
+
+ // and check as well KAboutData::applicationData itself
+ const KAboutData applicationAboutData2 = KAboutData::applicationData();
+
+ QCOMPARE(applicationAboutData2.componentName(), QLatin1String(AppName2));
+ QCOMPARE(applicationAboutData2.displayName(), QLatin1String(ProgramName2));
+ QCOMPARE(applicationAboutData2.organizationDomain(), QLatin1String(OrganizationDomain2));
+ QCOMPARE(applicationAboutData2.version(), QLatin1String(Version2));
+ QCOMPARE(applicationAboutData2.desktopFileName(), QLatin1String(DesktopFileName2));
+}
+
+QTEST_MAIN(KAboutDataApplicationDataTest)
+
+#include "kaboutdataapplicationdatatest.moc"
--- /dev/null
+/*
+ * Copyright 2008 Friedrich W. H. Kossebau <kossebau@kde.org>
+ * Copyright 2017 Harald Sitter <sitter@kde.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License version 2 as published by the Free Software Foundation;
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+// test object
+#include <kaboutdata.h>
+// Qt
+#include <QObject>
+#include <QFile>
+#include <QTextStream>
+#include <QTest>
+#include <QLatin1String>
+
+class KAboutDataTest : public QObject
+{
+ Q_OBJECT
+
+private Q_SLOTS:
+ void testLongFormConstructorWithDefaults();
+ void testLongFormConstructor();
+ void testShortFormConstructor();
+ void testSetAddLicense();
+ void testSetProgramIconName();
+ void testSetDesktopFileName();
+ void testCopying();
+
+ void testKAboutDataOrganizationDomain();
+
+ void testLicenseSPDXID();
+ void testLicenseOrLater();
+};
+
+static const char AppName[] = "app";
+static const char ProgramName[] = "ProgramName";
+static const char ProgramIconName[] = "program-icon";
+static const char Version[] = "Version";
+static const char ShortDescription[] = "ShortDescription";
+static const char CopyrightStatement[] = "CopyrightStatement";
+static const char Text[] = "Text";
+static const char HomePageAddress[] = "http://test.no.where/";
+static const char HomePageSecure[] = "https://test.no.where/";
+static const char OrganizationDomain[] = "no.where";
+static const char BugsEmailAddress[] = "bugs@no.else";
+static const char LicenseText[] = "free to write, reading forbidden";
+static const char LicenseFileName[] = "testlicensefile";
+static const char LicenseFileText[] = "free to write, reading forbidden, in the file";
+
+void KAboutDataTest::testLongFormConstructorWithDefaults()
+{
+ KAboutData aboutData(QString::fromLatin1(AppName), QLatin1String(ProgramName), QString::fromLatin1(Version),
+ QLatin1String(ShortDescription), KAboutLicense::Unknown);
+
+ QCOMPARE(aboutData.componentName(), QString::fromLatin1(AppName));
+ QCOMPARE(aboutData.productName(), QString::fromLatin1(AppName));
+ QCOMPARE(aboutData.displayName(), QLatin1String(ProgramName));
+ QCOMPARE(aboutData.programIconName(), QString::fromLatin1(AppName));
+ QCOMPARE(aboutData.programLogo(), QVariant());
+ QCOMPARE(aboutData.organizationDomain(), QString::fromLatin1("kde.org"));
+ QCOMPARE(aboutData.version(), QString::fromLatin1(Version));
+ QCOMPARE(aboutData.homepage(), QString());
+ QCOMPARE(aboutData.bugAddress(), QString::fromLatin1("submit@bugs.kde.org"));
+ QVERIFY(aboutData.authors().isEmpty());
+ QVERIFY(aboutData.credits().isEmpty());
+ QVERIFY(aboutData.translators().isEmpty());
+ QCOMPARE(aboutData.otherText(), QString());
+ QCOMPARE(aboutData.licenses().count(), 1);
+ // We don't know the default text, do we?
+ // QCOMPARE( aboutData.licenses().at(0).name(KAboutLicense::ShortName), QString(WarningText) );
+ QVERIFY(!aboutData.licenses().at(0).name(KAboutLicense::ShortName).isEmpty());
+ // QCOMPARE( aboutData.licenses().at(0).name(KAboutLicense::FullName), QString(WarningText) );
+ QVERIFY(!aboutData.licenses().at(0).name(KAboutLicense::FullName).isEmpty());
+ // QCOMPARE( aboutData.licenses().at(0).text(), QString(WarningText) );
+ QVERIFY(!aboutData.licenses().at(0).text().isEmpty());
+ QCOMPARE(aboutData.copyrightStatement(), QString());
+ QCOMPARE(aboutData.shortDescription(), (QLatin1String(ShortDescription)));
+ QCOMPARE(aboutData.customAuthorPlainText(), QString());
+ QCOMPARE(aboutData.customAuthorRichText(), QString());
+ QVERIFY(!aboutData.customAuthorTextEnabled());
+ QCOMPARE(aboutData.desktopFileName(), QStringLiteral("org.kde.app"));
+ //TODO: test internalVersion, internalProgramName, internalBugAddress
+}
+
+void KAboutDataTest::testLongFormConstructor()
+{
+ KAboutData aboutData(QString::fromLatin1(AppName), QLatin1String(ProgramName), QString::fromLatin1(Version),
+ QLatin1String(ShortDescription), KAboutLicense::Unknown,
+ QLatin1String(CopyrightStatement), QLatin1String(Text),
+ QString::fromLatin1(HomePageAddress), QString::fromLatin1(BugsEmailAddress));
+
+ QCOMPARE(aboutData.componentName(), QLatin1String(AppName));
+ QCOMPARE(aboutData.productName(), QLatin1String(AppName));
+ QCOMPARE(aboutData.displayName(), QLatin1String(ProgramName));
+ QCOMPARE(aboutData.programIconName(), QLatin1String(AppName));
+ QCOMPARE(aboutData.programLogo(), QVariant());
+ QCOMPARE(aboutData.organizationDomain(), QString::fromLatin1(OrganizationDomain));
+ QCOMPARE(aboutData.version(), QString::fromLatin1(Version));
+ QCOMPARE(aboutData.homepage(), QString::fromLatin1(HomePageAddress));
+ QCOMPARE(aboutData.bugAddress(), QString::fromLatin1(BugsEmailAddress));
+ QVERIFY(aboutData.authors().isEmpty());
+ QVERIFY(aboutData.credits().isEmpty());
+ QVERIFY(aboutData.translators().isEmpty());
+ QCOMPARE(aboutData.otherText(), QLatin1String(Text));
+ QCOMPARE(aboutData.licenses().count(), 1);
+ // We don't know the default text, do we?
+ // QCOMPARE( aboutData.licenses().at(0).name(KAboutLicense::ShortName), QString(WarningText) );
+ QVERIFY(!aboutData.licenses().at(0).name(KAboutLicense::ShortName).isEmpty());
+ // QCOMPARE( aboutData.licenses().at(0).name(KAboutLicense::FullName), QString(WarningText) );
+ QVERIFY(!aboutData.licenses().at(0).name(KAboutLicense::FullName).isEmpty());
+ // QCOMPARE( aboutData.licenses().at(0).text(), QString(WarningText) );
+ QVERIFY(!aboutData.licenses().at(0).text().isEmpty());
+ QCOMPARE(aboutData.copyrightStatement(), QLatin1String(CopyrightStatement));
+ QCOMPARE(aboutData.shortDescription(), QLatin1String(ShortDescription));
+ QCOMPARE(aboutData.customAuthorPlainText(), QString());
+ QCOMPARE(aboutData.customAuthorRichText(), QString());
+ QVERIFY(!aboutData.customAuthorTextEnabled());
+ QCOMPARE(aboutData.desktopFileName(), QStringLiteral("where.no.app"));
+ //TODO: test internalVersion, internalProgramName, internalBugAddress
+
+ // We support http and https protocols on the homepage address, ensure they
+ // give the same org. domain and desktop file name.
+ KAboutData aboutDataSecure(QString::fromLatin1(AppName), QLatin1String(ProgramName), QString::fromLatin1(Version),
+ QLatin1String(ShortDescription), KAboutLicense::Unknown,
+ QLatin1String(CopyrightStatement), QLatin1String(Text),
+ QString::fromLatin1(HomePageSecure), QString::fromLatin1(BugsEmailAddress));
+ QCOMPARE(aboutDataSecure.componentName(), QLatin1String(AppName));
+ QCOMPARE(aboutDataSecure.productName(), QLatin1String(AppName));
+ QCOMPARE(aboutDataSecure.organizationDomain(), QString::fromLatin1(OrganizationDomain));
+ QCOMPARE(aboutDataSecure.desktopFileName(), QStringLiteral("where.no.app"));
+}
+
+void KAboutDataTest::testShortFormConstructor()
+{
+ KAboutData aboutData(QString::fromLatin1(AppName), QLatin1String(ProgramName), QString::fromLatin1(Version));
+
+ QCOMPARE(aboutData.componentName(), QString::fromLatin1(AppName));
+ QCOMPARE(aboutData.productName(), QString::fromLatin1(AppName));
+ QCOMPARE(aboutData.displayName(), QLatin1String(ProgramName));
+ QCOMPARE(aboutData.programIconName(), QString::fromLatin1(AppName));
+ QCOMPARE(aboutData.programLogo(), QVariant());
+ QCOMPARE(aboutData.organizationDomain(), QString::fromLatin1("kde.org"));
+ QCOMPARE(aboutData.version(), QString::fromLatin1(Version));
+ QCOMPARE(aboutData.homepage(), QString());
+ QCOMPARE(aboutData.bugAddress(), QString::fromLatin1("submit@bugs.kde.org"));
+ QVERIFY(aboutData.authors().isEmpty());
+ QVERIFY(aboutData.credits().isEmpty());
+ QVERIFY(aboutData.translators().isEmpty());
+ QCOMPARE(aboutData.otherText(), QString());
+ QCOMPARE(aboutData.licenses().count(), 1);
+ // We don't know the default text, do we?
+ // QCOMPARE( aboutData.licenses().at(0).name(KAboutLicense::ShortName), QString(WarningText) );
+ QVERIFY(!aboutData.licenses().at(0).name(KAboutLicense::ShortName).isEmpty());
+ // QCOMPARE( aboutData.licenses().at(0).name(KAboutLicense::FullName), QString(WarningText) );
+ QVERIFY(!aboutData.licenses().at(0).name(KAboutLicense::FullName).isEmpty());
+ // QCOMPARE( aboutData.licenses().at(0).text(), QString(WarningText) );
+ QVERIFY(!aboutData.licenses().at(0).text().isEmpty());
+ QCOMPARE(aboutData.copyrightStatement(), QString());
+ QCOMPARE(aboutData.shortDescription(), QString());
+ QCOMPARE(aboutData.customAuthorPlainText(), QString());
+ QCOMPARE(aboutData.customAuthorRichText(), QString());
+ QVERIFY(!aboutData.customAuthorTextEnabled());
+ QCOMPARE(aboutData.desktopFileName(), QStringLiteral("org.kde.app"));
+ //TODO: test internalVersion, internalProgramName, internalBugAddress
+}
+
+void KAboutDataTest::testKAboutDataOrganizationDomain()
+{
+ KAboutData data(QString::fromLatin1("app"), QLatin1String("program"), QString::fromLatin1("version"),
+ QLatin1String("description"), KAboutLicense::LGPL,
+ QLatin1String("copyright"), QLatin1String("hello world"),
+ QStringLiteral("http://www.koffice.org"));
+ QCOMPARE(data.organizationDomain(), QString::fromLatin1("koffice.org"));
+ QCOMPARE(data.desktopFileName(), QStringLiteral("org.koffice.app"));
+
+ KAboutData data2(QString::fromLatin1("app"), QLatin1String("program"), QString::fromLatin1("version"),
+ QLatin1String("description"), KAboutLicense::LGPL,
+ QString::fromLatin1("copyright"), QLatin1String("hello world"),
+ QStringLiteral("app"));
+ QCOMPARE(data2.organizationDomain(), QString::fromLatin1("kde.org"));
+ QCOMPARE(data2.desktopFileName(), QStringLiteral("org.kde.app"));
+}
+
+void KAboutDataTest::testSetAddLicense()
+{
+ // prepare a file with a license text
+ QFile licenseFile(QString::fromLatin1(LicenseFileName));
+ licenseFile.open(QIODevice::WriteOnly);
+ QTextStream licenseFileStream(&licenseFile);
+ licenseFileStream << LicenseFileText;
+ licenseFile.close();
+
+ const QString copyrightStatement = QLatin1String(CopyrightStatement);
+ const QString lineFeed = QString::fromLatin1("\n\n");
+
+ KAboutData aboutData(QString::fromLatin1(AppName), QLatin1String(ProgramName), QString::fromLatin1(Version),
+ QLatin1String(ShortDescription), KAboutLicense::Unknown,
+ QLatin1String(CopyrightStatement), QLatin1String(Text),
+ QString::fromLatin1(HomePageAddress), QString::fromLatin1(BugsEmailAddress));
+
+ // set to GPL2
+ aboutData.setLicense(KAboutLicense::GPL_V2);
+
+ QCOMPARE(aboutData.licenses().count(), 1);
+ QCOMPARE(aboutData.licenses().at(0).name(KAboutLicense::ShortName), QString::fromLatin1("GPL v2"));
+ QCOMPARE(aboutData.licenses().at(0).name(KAboutLicense::FullName), QString::fromLatin1("GNU General Public License Version 2"));
+ // QCOMPARE( aboutData.licenses().at(0).text(), QString(GPL2Text) );
+ QVERIFY(!aboutData.licenses().at(0).text().isEmpty());
+
+ // set to Unknown again
+ aboutData.setLicense(KAboutLicense::Unknown);
+
+ QCOMPARE(aboutData.licenses().count(), 1);
+ // We don't know the default text, do we?
+ // QCOMPARE( aboutData.licenses().at(0).name(KAboutLicense::ShortName), QString(WarningText) );
+ QVERIFY(!aboutData.licenses().at(0).name(KAboutLicense::ShortName).isEmpty());
+ // QCOMPARE( aboutData.licenses().at(0).name(KAboutLicense::FullName), QString(WarningText) );
+ QVERIFY(!aboutData.licenses().at(0).name(KAboutLicense::FullName).isEmpty());
+ // QCOMPARE( aboutData.licenses().at(0).text(), QString(WarningText) );
+ QVERIFY(!aboutData.licenses().at(0).text().isEmpty());
+
+ // add GPL3
+ aboutData.addLicense(KAboutLicense::GPL_V3);
+
+ QCOMPARE(aboutData.licenses().count(), 1);
+ QCOMPARE(aboutData.licenses().at(0).name(KAboutLicense::ShortName), QString::fromLatin1("GPL v3"));
+ QCOMPARE(aboutData.licenses().at(0).name(KAboutLicense::FullName), QString::fromLatin1("GNU General Public License Version 3"));
+ // QCOMPARE( aboutData.licenses().at(0).text(), QString(GPL3Text) );
+ QVERIFY(!aboutData.licenses().at(0).text().isEmpty());
+
+ // add GPL2, Custom and File
+ aboutData.addLicense(KAboutLicense::GPL_V2);
+ aboutData.addLicenseText(QLatin1String(LicenseText));
+ aboutData.addLicenseTextFile(QLatin1String(LicenseFileName));
+
+ QCOMPARE(aboutData.licenses().count(), 4);
+ QCOMPARE(aboutData.licenses().at(0).name(KAboutLicense::ShortName), QString::fromLatin1("GPL v3"));
+ QCOMPARE(aboutData.licenses().at(0).name(KAboutLicense::FullName), QString::fromLatin1("GNU General Public License Version 3"));
+ // QCOMPARE( aboutData.licenses().at(0).text(), QString(GPL3Text) );
+ QVERIFY(!aboutData.licenses().at(0).text().isEmpty());
+ QCOMPARE(aboutData.licenses().at(1).name(KAboutLicense::ShortName), QString::fromLatin1("GPL v2"));
+ QCOMPARE(aboutData.licenses().at(1).name(KAboutLicense::FullName), QString::fromLatin1("GNU General Public License Version 2"));
+ // QCOMPARE( aboutData.licenses().at(1).text(), QString(GPL2Text) );
+ QVERIFY(!aboutData.licenses().at(1).text().isEmpty());
+ QCOMPARE(aboutData.licenses().at(2).name(KAboutLicense::ShortName), QString::fromLatin1("Custom"));
+ QCOMPARE(aboutData.licenses().at(2).name(KAboutLicense::FullName), QString::fromLatin1("Custom"));
+ QCOMPARE(aboutData.licenses().at(2).text(), QLatin1String(LicenseText));
+ QCOMPARE(aboutData.licenses().at(3).name(KAboutLicense::ShortName), QString::fromLatin1("Custom"));
+ QCOMPARE(aboutData.licenses().at(3).name(KAboutLicense::FullName), QString::fromLatin1("Custom"));
+ QCOMPARE(aboutData.licenses().at(3).text(), QString(copyrightStatement + lineFeed +
+ QLatin1String(LicenseFileText)));
+}
+
+void KAboutDataTest::testSetProgramIconName()
+{
+ const QString programIconName(QString::fromLatin1(ProgramIconName));
+
+ KAboutData aboutData(QString::fromLatin1(AppName), QLatin1String(ProgramName), QString::fromLatin1(Version),
+ QLatin1String(ShortDescription), KAboutLicense::Unknown,
+ QLatin1String(CopyrightStatement), QLatin1String(Text),
+ QString::fromLatin1(HomePageAddress), QString::fromLatin1(BugsEmailAddress));
+
+ // Deprecated, still want to test this though. Silence GCC warnings.
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+ // set different iconname
+ aboutData.setProgramIconName(programIconName);
+#pragma GCC diagnostic pop
+ QCOMPARE(aboutData.programIconName(), programIconName);
+}
+
+void KAboutDataTest::testCopying()
+{
+ KAboutData aboutData(QString::fromLatin1(AppName), QLatin1String(ProgramName), QString::fromLatin1(Version),
+ QLatin1String(ShortDescription), KAboutLicense::GPL_V2);
+
+ {
+ KAboutData aboutData2(QString::fromLatin1(AppName), QLatin1String(ProgramName), QString::fromLatin1(Version),
+ QLatin1String(ShortDescription), KAboutLicense::GPL_V3);
+ aboutData2.addLicense(KAboutLicense::GPL_V2, KAboutLicense::OrLaterVersions);
+ aboutData = aboutData2;
+ }
+ QList<KAboutLicense> licenses = aboutData.licenses();
+ QCOMPARE(licenses.count(), 2);
+ QCOMPARE(licenses.at(0).key(), KAboutLicense::GPL_V3);
+ QCOMPARE(aboutData.licenses().at(0).spdx(), QStringLiteral("GPL-3.0"));
+ // check it doesn't crash
+ QVERIFY(!licenses.at(0).text().isEmpty());
+ QCOMPARE(licenses.at(1).key(), KAboutLicense::GPL_V2);
+ QCOMPARE(aboutData.licenses().at(1).spdx(), QStringLiteral("GPL-2.0+"));
+ // check it doesn't crash
+ QVERIFY(!licenses.at(1).text().isEmpty());
+}
+
+void KAboutDataTest::testSetDesktopFileName()
+{
+ KAboutData aboutData(QString::fromLatin1(AppName), QLatin1String(ProgramName), QString::fromLatin1(Version),
+ QLatin1String(ShortDescription), KAboutLicense::Unknown);
+ QCOMPARE(aboutData.desktopFileName(), QStringLiteral("org.kde.app"));
+
+ // set different desktopFileName
+ aboutData.setDesktopFileName(QStringLiteral("foo.bar.application"));
+ QCOMPARE(aboutData.desktopFileName(), QStringLiteral("foo.bar.application"));
+}
+
+void KAboutDataTest::testLicenseSPDXID()
+{
+ // Input with + should output with +.
+ auto license = KAboutLicense::byKeyword(QStringLiteral("GPLv2+"));
+ QCOMPARE(license.spdx(), QStringLiteral("GPL-2.0+"));
+ // Input without should output without.
+ license = KAboutLicense::byKeyword(QStringLiteral("GPLv2"));
+ QCOMPARE(license.spdx(), QStringLiteral("GPL-2.0"));
+
+ //we should be able to match by spdx too
+ //create a KAboutLicense from enum, then make sure going to spdx and back gives the same enum
+ for(int i = 1; i <= KAboutLicense::LGPL_V2_1 ; ++i) { /*current highest enum value*/
+ KAboutData aboutData(QString::fromLatin1(AppName), QLatin1String(ProgramName), QString::fromLatin1(Version),
+ QLatin1String(ShortDescription), KAboutLicense::GPL_V2);
+ aboutData.setLicense(KAboutLicense::LicenseKey(i));
+ QVERIFY(aboutData.licenses().count() == 1);
+ auto license = aboutData.licenses()[0];
+ auto licenseFromKeyword = KAboutLicense::byKeyword(license.spdx());
+
+ QCOMPARE(license.key(), licenseFromKeyword.key());
+ }
+}
+
+void KAboutDataTest::testLicenseOrLater()
+{
+ // For kaboutdata we can replace the license with an orLater version. Or add a second one.
+ KAboutData aboutData(QString::fromLatin1(AppName), QLatin1String(ProgramName), QString::fromLatin1(Version),
+ QLatin1String(ShortDescription), KAboutLicense::GPL_V2);
+ QCOMPARE(aboutData.licenses().at(0).spdx(), QStringLiteral("GPL-2.0"));
+ aboutData.setLicense(KAboutLicense::GPL_V2, KAboutLicense::OrLaterVersions);
+ QCOMPARE(aboutData.licenses().at(0).spdx(), QStringLiteral("GPL-2.0+"));
+ aboutData.addLicense(KAboutLicense::LGPL_V3, KAboutLicense::OrLaterVersions);
+ bool foundLGPL = false;
+ for (auto license : aboutData.licenses()) {
+ if (license.key() == KAboutLicense::LGPL_V3) {
+ QCOMPARE(license.spdx(), QStringLiteral("LGPL-3.0+"));
+ foundLGPL = true;
+ break;
+ }
+ }
+ QCOMPARE(foundLGPL, true);
+}
+
+QTEST_MAIN(KAboutDataTest)
+
+#include "kaboutdatatest.moc"
--- /dev/null
+/* This file is part of the KDE libraries
+ Copyright (c) 2006 Jacob R Rideout <kde@jacobrideout.net>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include "kautosavefiletest.h"
+
+#include <QFile>
+#include <QTextStream>
+
+#include <qtemporaryfile.h>
+#include <kautosavefile.h>
+
+#include <QtTest>
+
+QTEST_MAIN(KAutoSaveFileTest)
+
+void KAutoSaveFileTest::initTestCase()
+{
+ QCoreApplication::instance()->setApplicationName(QLatin1String("qttest")); // TODO do this in qtestlib itself
+}
+
+void KAutoSaveFileTest::cleanupTestCase()
+{
+ Q_FOREACH (const QString &fileToRemove, filesToRemove) {
+ QFile::remove(fileToRemove);
+ }
+}
+
+void KAutoSaveFileTest::test_readWrite()
+{
+ QTemporaryFile file;
+
+ QVERIFY(file.open());
+
+ QUrl normalFile = QUrl::fromLocalFile(QFileInfo(file).absoluteFilePath());
+
+ //Test basic functionality
+ KAutoSaveFile saveFile(normalFile);
+
+ QVERIFY(!QFile::exists(saveFile.fileName()));
+ QVERIFY(saveFile.open(QIODevice::ReadWrite));
+
+ QString inText = QString::fromLatin1("This is test data one.\n");
+
+ {
+ QTextStream ts(&saveFile);
+ ts << inText;
+ ts.flush();
+ }
+
+ saveFile.close();
+
+ {
+ QFile testReader(saveFile.fileName());
+ testReader.open(QIODevice::ReadWrite);
+ QTextStream ts(&testReader);
+
+ QString outText = ts.readAll();
+
+ QCOMPARE(outText, inText);
+ }
+
+ filesToRemove << file.fileName();
+}
+
+void KAutoSaveFileTest::test_fileStaleFiles()
+{
+ QUrl normalFile = QUrl::fromLocalFile(QDir::temp().absoluteFilePath(QStringLiteral("test directory/tîst me.txt")));
+
+ KAutoSaveFile saveFile(normalFile);
+ QVERIFY(saveFile.open(QIODevice::ReadWrite));
+ saveFile.write("testdata");
+ // Make sure the stale file is found
+ QVERIFY(saveFile.staleFiles(normalFile, QStringLiteral("qttest")).count() == 1);
+ saveFile.releaseLock();
+ // Make sure the stale file is deleted
+ QVERIFY(saveFile.staleFiles(normalFile, QStringLiteral("qttest")).isEmpty());
+}
+
+void KAutoSaveFileTest::test_applicationStaleFiles()
+{
+ // TODO
+}
+
+void KAutoSaveFileTest::test_locking()
+{
+ QUrl normalFile(QString::fromLatin1("fish://user@example.com/home/remote/test.txt"));
+
+ KAutoSaveFile saveFile(normalFile);
+
+ QVERIFY(!QFile::exists(saveFile.fileName()));
+ QVERIFY(saveFile.open(QIODevice::ReadWrite));
+
+ const QList<KAutoSaveFile *> staleFiles(KAutoSaveFile::staleFiles(normalFile));
+
+ QVERIFY(!staleFiles.isEmpty());
+
+ KAutoSaveFile *saveFile2 = staleFiles.at(0);
+
+ const QString fn = saveFile2->fileName();
+ // It looks like $XDG_DATA_HOME/stalefiles/qttest/test.txtXXXfish_%2Fhome%2FremoteXXXXXXX
+ QVERIFY2(fn.contains(QLatin1String("stalefiles/qttest/test.txt")), qPrintable(fn));
+ QVERIFY2(fn.contains(QLatin1String("fish_%2Fhome%2Fremote")), qPrintable(fn));
+
+ QVERIFY(QFile::exists(saveFile2->fileName()));
+ QVERIFY(!saveFile2->open(QIODevice::ReadWrite));
+
+ saveFile.releaseLock();
+
+ QVERIFY(saveFile2->open(QIODevice::ReadWrite));
+
+ delete saveFile2;
+
+}
--- /dev/null
+/* This file is part of the KDE libraries
+ Copyright (c) 2006 Jacob R Rideout <kde@jacobrideout.net>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef kautosavefiletest_h
+#define kautosavefiletest_h
+
+#include <QObject>
+#include <QStringList>
+
+class KAutoSaveFileTest : public QObject
+{
+ Q_OBJECT
+
+private Q_SLOTS:
+ void initTestCase();
+ void test_readWrite();
+ void test_fileStaleFiles();
+ void test_applicationStaleFiles();
+ void test_locking();
+ void cleanupTestCase();
+
+private:
+ QStringList filesToRemove;
+};
+
+#endif
--- /dev/null
+/* This file is part of the KDE project
+ Copyright (C) 2013 Kevin Funk <kevin@kfunk.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+
+*/
+
+#include "kcompositejobtest.h"
+
+#include <QtTest>
+#include <QTimer>
+
+TestJob::TestJob(QObject *parent)
+ : KJob(parent)
+{
+}
+
+void TestJob::start()
+{
+ QTimer::singleShot(1000, this, SLOT(doEmit()));
+}
+
+void TestJob::doEmit()
+{
+ emitResult();
+}
+
+void CompositeJob::start()
+{
+ if (hasSubjobs()) {
+ subjobs().first()->start();
+ } else {
+ emitResult();
+ }
+}
+
+bool CompositeJob::addSubjob(KJob *job)
+{
+ return KCompositeJob::addSubjob(job);
+}
+
+void CompositeJob::slotResult(KJob *job)
+{
+ KCompositeJob::slotResult(job);
+
+ if (!error() && hasSubjobs()) {
+ // start next
+ subjobs().first()->start();
+ } else {
+ setError(job->error());
+ setErrorText(job->errorText());
+ emitResult();
+ }
+}
+
+KCompositeJobTest::KCompositeJobTest()
+ : loop(this)
+{
+}
+
+/**
+ * In case a composite job is deleted during execution
+ * we still want to assure that we don't crash
+ *
+ * see bug: https://bugs.kde.org/show_bug.cgi?id=230692
+ */
+void KCompositeJobTest::testDeletionDuringExecution()
+{
+ QObject *someParent = new QObject;
+ KJob *job = new TestJob(someParent);
+
+ CompositeJob *compositeJob = new CompositeJob;
+ compositeJob->setAutoDelete(false);
+ QVERIFY(compositeJob->addSubjob(job));
+
+ QCOMPARE(job->parent(), compositeJob);
+
+ QSignalSpy destroyed_spy(job, SIGNAL(destroyed(QObject*)));
+ // check if job got reparented properly
+ delete someParent; someParent = nullptr;
+ // the job should still exist, because it is a child of KCompositeJob now
+ QCOMPARE(destroyed_spy.size(), 0);
+
+ // start async, the subjob takes 1 second to finish
+ compositeJob->start();
+
+ // delete the job during the execution
+ delete compositeJob; compositeJob = nullptr;
+ // at this point, the subjob should be deleted, too
+ QCOMPARE(destroyed_spy.size(), 1);
+}
+
+QTEST_GUILESS_MAIN(KCompositeJobTest)
+
--- /dev/null
+/* This file is part of the KDE project
+ Copyright (C) 2013 Kevin Funk <kevin@kfunk.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+
+*/
+
+#ifndef KCOMPOSITEJOBTEST_H
+#define KCOMPOSITEJOBTEST_H
+
+#include <QEventLoop>
+#include <QObject>
+
+#include "kcompositejob.h"
+
+class TestJob : public KJob
+{
+ Q_OBJECT
+
+public:
+ explicit TestJob(QObject *parent = nullptr);
+
+ /// Takes 1 second to finish
+ void start() override;
+
+private Q_SLOTS:
+ void doEmit();
+};
+
+class CompositeJob : public KCompositeJob
+{
+ Q_OBJECT
+
+public:
+ explicit CompositeJob(QObject *parent = nullptr) : KCompositeJob(parent) {}
+
+ void start() override;
+ bool addSubjob(KJob *job) override;
+
+protected Q_SLOTS:
+ void slotResult(KJob *job) override;
+};
+
+class KCompositeJobTest : public QObject
+{
+ Q_OBJECT
+
+public:
+ KCompositeJobTest();
+
+private Q_SLOTS:
+ void testDeletionDuringExecution();
+
+private:
+ QEventLoop loop;
+};
+
+#endif // KCOMPOSITEJOBTEST_H
--- /dev/null
+/*
+ * Copyright 2014 Montel Laurent <montel@kde.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License version 2 as published by the Free Software Foundation;
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+// test object
+#include "kdelibs4configmigrator.h"
+// Qt
+#include <QObject>
+#include <QFile>
+#include <QTemporaryDir>
+#include <QTest>
+#include <QDebug>
+#include <QStandardPaths>
+
+class Kdelibs4ConfigMigratorTest : public QObject
+{
+ Q_OBJECT
+
+private Q_SLOTS:
+ void initTestCase();
+ void shouldNotMigrateIfKde4HomeDirDoesntExist();
+ void shouldMigrateIfKde4HomeDirExist();
+ void shouldMigrateConfigFiles();
+ void shouldMigrateUiFiles();
+};
+
+void Kdelibs4ConfigMigratorTest::initTestCase()
+{
+ QStandardPaths::setTestModeEnabled(true);
+ const QString configHome = QStandardPaths::writableLocation(QStandardPaths::ConfigLocation);
+ QDir(configHome).removeRecursively();
+ const QString dataHome = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation);
+ QDir(dataHome).removeRecursively();
+}
+
+void Kdelibs4ConfigMigratorTest::shouldNotMigrateIfKde4HomeDirDoesntExist()
+{
+ qputenv("KDEHOME", "");
+ Kdelibs4ConfigMigrator migration(QLatin1String("foo"));
+ QCOMPARE(migration.migrate(), false);
+}
+
+void Kdelibs4ConfigMigratorTest::shouldMigrateIfKde4HomeDirExist()
+{
+ QTemporaryDir kdehomeDir;
+ QVERIFY(kdehomeDir.isValid());
+ const QString kdehome = kdehomeDir.path();
+ qputenv("KDEHOME", QFile::encodeName(kdehome));
+ Kdelibs4ConfigMigrator migration(QLatin1String("foo"));
+ QCOMPARE(migration.migrate(), true);
+}
+
+void Kdelibs4ConfigMigratorTest::shouldMigrateConfigFiles()
+{
+ QTemporaryDir kdehomeDir;
+ const QString kdehome = kdehomeDir.path();
+ qputenv("KDEHOME", QFile::encodeName(kdehome));
+
+ //Generate kde4 config dir
+ const QString configPath = kdehome + QLatin1Char('/') + QLatin1String("share/config/");
+ QDir().mkpath(configPath);
+ QVERIFY(QDir(configPath).exists());
+
+ QStringList listConfig;
+ listConfig << QLatin1String("foorc") << QLatin1String("foo1rc");
+ Q_FOREACH (const QString &config, listConfig) {
+ QFile fooConfigFile(QLatin1String(KDELIBS4CONFIGMIGRATOR_DATA_DIR) + QLatin1Char('/') + config);
+ QVERIFY(fooConfigFile.exists());
+ const QString storedConfigFilePath = configPath + QLatin1Char('/') + config;
+ QVERIFY(QFile::copy(fooConfigFile.fileName(), storedConfigFilePath));
+ QCOMPARE(QStandardPaths::locate(QStandardPaths::ConfigLocation, config), QString());
+ }
+
+ Kdelibs4ConfigMigrator migration(QLatin1String("foo"));
+ migration.setConfigFiles(QStringList() << listConfig);
+ QVERIFY(migration.migrate());
+
+ Q_FOREACH (const QString &config, listConfig) {
+ const QString migratedConfigFile = QStandardPaths::locate(QStandardPaths::ConfigLocation, config);
+ QVERIFY(!migratedConfigFile.isEmpty());
+ QVERIFY(QFile(migratedConfigFile).exists());
+ QFile::remove(migratedConfigFile);
+ }
+}
+
+void Kdelibs4ConfigMigratorTest::shouldMigrateUiFiles()
+{
+ QTemporaryDir kdehomeDir;
+ const QString kdehome = kdehomeDir.path();
+ qputenv("KDEHOME", QFile::encodeName(kdehome));
+
+ const QString appName = QLatin1String("foo");
+
+ //Generate kde4 data dir
+ const QString dataPath = kdehome + QLatin1Char('/') + QLatin1String("share/apps/");
+ QDir().mkpath(dataPath);
+ QVERIFY(QDir(dataPath).exists());
+
+ const QString xdgDatahome = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation);
+
+ QStringList listUi;
+ listUi << QLatin1String("appuirc") << QLatin1String("appui1rc");
+ Q_FOREACH (const QString &uifile, listUi) {
+ QFile fooConfigFile(QLatin1String(KDELIBS4CONFIGMIGRATOR_DATA_DIR) + QLatin1Char('/') + uifile);
+ QVERIFY(fooConfigFile.exists());
+ QDir().mkpath(dataPath + QLatin1Char('/') + appName);
+ const QString storedConfigFilePath = dataPath + QLatin1Char('/') + appName + QLatin1Char('/') + uifile;
+ QVERIFY(QFile::copy(fooConfigFile.fileName(), storedConfigFilePath));
+
+ const QString xdgUiFile = xdgDatahome + QLatin1String("/kxmlgui5/") + appName + QLatin1Char('/') + uifile;
+ QVERIFY(!QFile::exists(xdgUiFile));
+ }
+
+ Kdelibs4ConfigMigrator migration(appName);
+ migration.setUiFiles(QStringList() << listUi);
+ QVERIFY(migration.migrate());
+
+ Q_FOREACH (const QString &uifile, listUi) {
+ const QString xdgUiFile = xdgDatahome + QLatin1String("/kxmlgui5/") + appName + QLatin1Char('/') + uifile;
+ QVERIFY(QFile(xdgUiFile).exists());
+ QFile::remove(xdgUiFile);
+ }
+}
+
+QTEST_MAIN(Kdelibs4ConfigMigratorTest)
+
+#include "kdelibs4configmigratortest.moc"
+
--- /dev/null
+/*
+ * Copyright 2014 David Faure <faure@kde.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License version 2 as published by the Free Software Foundation;
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+// test object
+#include <kdelibs4migration.h>
+// Qt
+#include <QObject>
+#include <QFile>
+#include <QTemporaryDir>
+#include <QTest>
+
+class MigrationTest : public QObject
+{
+ Q_OBJECT
+
+private Q_SLOTS:
+ void testPaths();
+};
+
+void MigrationTest::testPaths()
+{
+ // Setup
+ QTemporaryDir kdehomeDir;
+ QVERIFY(kdehomeDir.isValid());
+ QString kdehome = kdehomeDir.path();
+ qputenv("KDEHOME", QFile::encodeName(kdehome));
+
+ QString oldConfigDir = kdehome + QStringLiteral("/share/config/");
+ QVERIFY(QDir().mkpath(oldConfigDir));
+ QString oldAppsDir = kdehome + QStringLiteral("/share/apps/");
+ QVERIFY(QDir().mkpath(oldAppsDir));
+ // Test
+ Kdelibs4Migration migration;
+
+ QVERIFY(migration.kdeHomeFound());
+ QCOMPARE(migration.saveLocation("config"), oldConfigDir);
+ QCOMPARE(migration.saveLocation("data"), oldAppsDir);
+}
+
+QTEST_MAIN(MigrationTest)
+
+#include "kdelibs4migrationtest.moc"
+
--- /dev/null
+/* This file is part of the KDE libraries
+
+ Copyright (c) 2009 David Faure <faure@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include <kdirwatch.h>
+
+#include <QDir>
+#include <QDebug>
+#include <QFileInfo>
+#include <qtemporarydir.h>
+#include <QtTest>
+#include <sys/stat.h>
+#ifdef Q_OS_UNIX
+#include <unistd.h> // ::link()
+#endif
+
+// Debugging notes: to see which inotify signals are emitted, either set s_verboseDebug=true
+// at the top of kdirwatch.cpp, or use the command-line tool "inotifywait -m /path"
+
+// Note that kdirlistertest and kdirmodeltest also exercise KDirWatch quite a lot.
+
+static const char *methodToString(KDirWatch::Method method)
+{
+ switch (method) {
+ case KDirWatch::FAM:
+ return "Fam";
+ case KDirWatch::INotify:
+ return "INotify";
+ case KDirWatch::Stat:
+ return "Stat";
+ case KDirWatch::QFSWatch:
+ return "QFSWatch";
+ }
+ return "ERROR!";
+}
+
+class StaticObject
+{
+public:
+ KDirWatch m_dirWatch;
+};
+Q_GLOBAL_STATIC(StaticObject, s_staticObject)
+
+class StaticObjectUsingSelf // like KSambaShare does, bug 353080
+{
+public:
+ StaticObjectUsingSelf() {
+ KDirWatch::self();
+ }
+ ~StaticObjectUsingSelf() {
+ if (KDirWatch::exists() && KDirWatch::self()->contains(QDir::homePath())) {
+ KDirWatch::self()->removeDir(QDir::homePath());
+ }
+ }
+};
+Q_GLOBAL_STATIC(StaticObjectUsingSelf, s_staticObjectUsingSelf)
+
+class KDirWatch_UnitTest : public QObject
+{
+ Q_OBJECT
+public:
+ KDirWatch_UnitTest()
+ {
+ // Speed up the test by making the kdirwatch timer (to compress changes) faster
+ qputenv("KDIRWATCH_POLLINTERVAL", "50");
+ qputenv("KDIRWATCH_METHOD", KDIRWATCH_TEST_METHOD);
+ s_staticObjectUsingSelf();
+
+ m_path = m_tempDir.path() + QLatin1Char('/');
+ KDirWatch *dirW = &s_staticObject()->m_dirWatch;
+ m_slow = (dirW->internalMethod() == KDirWatch::FAM || dirW->internalMethod() == KDirWatch::Stat);
+ qDebug() << "Using method" << methodToString(dirW->internalMethod());
+ }
+
+private Q_SLOTS: // test methods
+ void initTestCase()
+ {
+ QFileInfo pathInfo(m_path);
+ QVERIFY(pathInfo.isDir() && pathInfo.isWritable());
+
+ // By creating the files upfront, we save waiting a full second for an mtime change
+ createFile(m_path + QLatin1String("ExistingFile"));
+ createFile(m_path + QLatin1String("TestFile"));
+ createFile(m_path + QLatin1String("nested_0"));
+ createFile(m_path + QLatin1String("nested_1"));
+
+ s_staticObject()->m_dirWatch.addFile(m_path + QLatin1String("ExistingFile"));
+ }
+ void touchOneFile();
+ void touch1000Files();
+ void watchAndModifyOneFile();
+ void removeAndReAdd();
+ void watchNonExistent();
+ void watchNonExistentWithSingleton();
+ void testDelete();
+ void testDeleteAndRecreateFile();
+ void testDeleteAndRecreateDir();
+ void testMoveTo();
+ void nestedEventLoop();
+ void testHardlinkChange();
+ void stopAndRestart();
+ void shouldIgnoreQrcPaths();
+ void benchCreateTree();
+ void benchCreateWatcher();
+ void benchNotifyWatcher();
+
+protected Q_SLOTS: // internal slots
+ void nestedEventLoopSlot();
+
+private:
+ void waitUntilMTimeChange(const QString &path);
+ void waitUntilNewSecond();
+ void waitUntilAfter(const QDateTime &ctime);
+ QList<QVariantList> waitForDirtySignal(KDirWatch &watch, int expected);
+ QList<QVariantList> waitForDeletedSignal(KDirWatch &watch, int expected);
+ bool waitForOneSignal(KDirWatch &watch, const char *sig, const QString &path);
+ bool waitForRecreationSignal(KDirWatch &watch, const QString &path);
+ bool verifySignalPath(QSignalSpy &spy, const char *sig, const QString &expectedPath);
+ void createFile(const QString &path);
+ QString createFile(int num);
+ void removeFile(int num);
+ void appendToFile(const QString &path);
+ void appendToFile(int num);
+ int createDirectoryTree(const QString &path, int depth = 4);
+
+ QTemporaryDir m_tempDir;
+ QString m_path;
+ bool m_slow;
+};
+
+QTEST_MAIN(KDirWatch_UnitTest)
+
+// Just to make the inotify packets bigger
+static const char s_filePrefix[] = "This_is_a_test_file_";
+
+static const int s_maxTries = 50;
+
+// helper method: create a file
+void KDirWatch_UnitTest::createFile(const QString &path)
+{
+ QFile file(path);
+ QVERIFY(file.open(QIODevice::WriteOnly));
+ file.write(QByteArray("foo"));
+ file.close();
+ //qDebug() << path;
+}
+
+// helper method: create a file (identified by number)
+QString KDirWatch_UnitTest::createFile(int num)
+{
+ const QString fileName = QLatin1String(s_filePrefix) + QString::number(num);
+ createFile(m_path + fileName);
+ return m_path + fileName;
+}
+
+// helper method: delete a file (identified by number)
+void KDirWatch_UnitTest::removeFile(int num)
+{
+ const QString fileName = QLatin1String(s_filePrefix) + QString::number(num);
+ QFile::remove(m_path + fileName);
+}
+
+int KDirWatch_UnitTest::createDirectoryTree(const QString& basePath, int depth)
+{
+ int filesCreated = 0;
+
+ const int numFiles = 10;
+ for (int i = 0; i < numFiles; ++i) {
+ createFile(basePath + QLatin1Char('/') + QLatin1String(s_filePrefix) + QString::number(i));
+ ++filesCreated;
+ }
+
+ if (depth <= 0) {
+ return filesCreated;
+ }
+
+ const int numFolders = 5;
+ for (int i = 0; i < numFolders; ++i) {
+ const QString childPath = basePath + QLatin1String("/subdir") + QString::number(i);
+ QDir().mkdir(childPath);
+ filesCreated += createDirectoryTree(childPath, depth - 1);
+ }
+
+ return filesCreated;
+}
+
+void KDirWatch_UnitTest::waitUntilMTimeChange(const QString &path)
+{
+ // Wait until the current second is more than the file's mtime
+ // otherwise this change will go unnoticed
+
+ QFileInfo fi(path);
+ QVERIFY(fi.exists());
+ const QDateTime ctime = qMax(fi.lastModified(), fi.created());
+ waitUntilAfter(ctime);
+
+}
+
+void KDirWatch_UnitTest::waitUntilNewSecond()
+{
+ QDateTime now = QDateTime::currentDateTime();
+ waitUntilAfter(now);
+}
+
+void KDirWatch_UnitTest::waitUntilAfter(const QDateTime &ctime)
+{
+ int totalWait = 0;
+ QDateTime now;
+ Q_FOREVER {
+ now = QDateTime::currentDateTime();
+ if (now.toTime_t() == ctime.toTime_t()) // truncate milliseconds
+ {
+ totalWait += 50;
+ QTest::qWait(50);
+ } else {
+ QVERIFY(now > ctime); // can't go back in time ;)
+ QTest::qWait(50); // be safe
+ break;
+ }
+ }
+ //if (totalWait > 0)
+ qDebug() << "Waited" << totalWait << "ms so that now" << now.toString(Qt::ISODate) << "is >" << ctime.toString(Qt::ISODate);
+}
+
+// helper method: modifies a file
+void KDirWatch_UnitTest::appendToFile(const QString &path)
+{
+ QVERIFY(QFile::exists(path));
+ waitUntilMTimeChange(path);
+ //const QString directory = QDir::cleanPath(path+"/..");
+ //waitUntilMTimeChange(directory);
+
+ QFile file(path);
+ QVERIFY(file.open(QIODevice::Append | QIODevice::WriteOnly));
+ file.write(QByteArray("foobar"));
+ file.close();
+#if 0
+ QFileInfo fi(path);
+ QVERIFY(fi.exists());
+ qDebug() << "After append: file ctime=" << fi.lastModified().toString(Qt::ISODate);
+ QVERIFY(fi.exists());
+ qDebug() << "After append: directory mtime=" << fi.created().toString(Qt::ISODate);
+#endif
+}
+
+// helper method: modifies a file (identified by number)
+void KDirWatch_UnitTest::appendToFile(int num)
+{
+ const QString fileName = QLatin1String(s_filePrefix) + QString::number(num);
+ appendToFile(m_path + fileName);
+}
+
+static QString removeTrailingSlash(const QString &path)
+{
+ if (path.endsWith(QLatin1Char('/'))) {
+ return path.left(path.length() - 1);
+ } else {
+ return path;
+ }
+}
+
+// helper method
+QList<QVariantList> KDirWatch_UnitTest::waitForDirtySignal(KDirWatch &watch, int expected)
+{
+ QSignalSpy spyDirty(&watch, SIGNAL(dirty(QString)));
+ int numTries = 0;
+ // Give time for KDirWatch to notify us
+ while (spyDirty.count() < expected) {
+ if (++numTries > s_maxTries) {
+ qWarning() << "Timeout waiting for KDirWatch. Got" << spyDirty.count() << "dirty() signals, expected" << expected;
+ return spyDirty;
+ }
+ spyDirty.wait(50);
+ }
+ return spyDirty;
+}
+
+bool KDirWatch_UnitTest::waitForOneSignal(KDirWatch &watch, const char *sig, const QString &path)
+{
+ const QString expectedPath = removeTrailingSlash(path);
+ while (true) {
+ QSignalSpy spyDirty(&watch, sig);
+ int numTries = 0;
+ // Give time for KDirWatch to notify us
+ while (spyDirty.isEmpty()) {
+ if (++numTries > s_maxTries) {
+ qWarning() << "Timeout waiting for KDirWatch signal" << QByteArray(sig).mid(1) << "(" << path << ")";
+ return false;
+ }
+ spyDirty.wait(50);
+ }
+ return verifySignalPath(spyDirty, sig, expectedPath);
+ }
+}
+
+bool KDirWatch_UnitTest::verifySignalPath(QSignalSpy &spy, const char *sig, const QString &expectedPath)
+{
+ for (int i = 0; i < spy.count(); ++i) {
+ const QString got = spy[i][0].toString();
+ if (got == expectedPath) {
+ return true;
+ }
+ if (got.startsWith(expectedPath + QLatin1Char('/'))) {
+ qDebug() << "Ignoring (inotify) notification of" << (sig + 1) << '(' << got << ')';
+ continue;
+ }
+ qWarning() << "Expected" << sig << '(' << expectedPath << ')' << "but got" << sig << '(' << got << ')';
+ return false;
+ }
+ return false;
+}
+
+bool KDirWatch_UnitTest::waitForRecreationSignal(KDirWatch &watch, const QString &path)
+{
+ // When watching for a deleted + created signal pair, the two might come so close that
+ // using waitForOneSignal will miss the created signal. This function monitors both all
+ // the time to ensure both are received.
+
+ const QString expectedPath = removeTrailingSlash(path);
+ QSignalSpy spyDeleted(&watch, SIGNAL(deleted(QString)));
+ QSignalSpy spyCreated(&watch, SIGNAL(created(QString)));
+
+ if(!spyDeleted.wait(50 * s_maxTries)) {
+ qWarning() << "Timeout waiting for KDirWatch signal deleted(QString) (" << path << ")";
+ return false;
+ }
+
+ // Don't bother waiting for the created signal if the signal spy already received a signal.
+ if(spyCreated.isEmpty() && !spyCreated.wait(50 * s_maxTries)) {
+ qWarning() << "Timeout waiting for KDirWatch signal created(QString) (" << path << ")";
+ return false;
+ }
+
+ return verifySignalPath(spyDeleted, "deleted(QString)", expectedPath) && verifySignalPath(spyCreated, "created(QString)", expectedPath);
+}
+
+QList<QVariantList> KDirWatch_UnitTest::waitForDeletedSignal(KDirWatch &watch, int expected)
+{
+ QSignalSpy spyDeleted(&watch, SIGNAL(created(QString)));
+ int numTries = 0;
+ // Give time for KDirWatch to notify us
+ while (spyDeleted.count() < expected) {
+ if (++numTries > s_maxTries) {
+ qWarning() << "Timeout waiting for KDirWatch. Got" << spyDeleted.count() << "deleted() signals, expected" << expected;
+ return spyDeleted;
+ }
+ spyDeleted.wait(50);
+ }
+ return spyDeleted;
+}
+
+void KDirWatch_UnitTest::touchOneFile() // watch a dir, create a file in it
+{
+ KDirWatch watch;
+ watch.addDir(m_path);
+ watch.startScan();
+
+ waitUntilMTimeChange(m_path);
+
+ // dirty(the directory) should be emitted.
+ QSignalSpy spyCreated(&watch, SIGNAL(created(QString)));
+ const QString file0 = createFile(0);
+ QVERIFY(waitForOneSignal(watch, SIGNAL(dirty(QString)), m_path));
+ QCOMPARE(spyCreated.count(), 0); // "This is not emitted when creating a file is created in a watched directory."
+
+ removeFile(0);
+}
+
+void KDirWatch_UnitTest::touch1000Files()
+{
+ KDirWatch watch;
+ watch.addDir(m_path);
+ watch.startScan();
+
+ waitUntilMTimeChange(m_path);
+
+ const int fileCount = 100;
+ for (int i = 0; i < fileCount; ++i) {
+ createFile(i);
+ }
+
+ QList<QVariantList> spy = waitForDirtySignal(watch, fileCount);
+ if (watch.internalMethod() == KDirWatch::INotify) {
+ QVERIFY(spy.count() >= fileCount);
+ qDebug() << spy.count();
+ } else {
+ // More stupid backends just see one mtime change on the directory
+ QVERIFY(spy.count() >= 1);
+ }
+
+ for (int i = 0; i < fileCount; ++i) {
+ removeFile(i);
+ }
+}
+
+void KDirWatch_UnitTest::watchAndModifyOneFile() // watch a specific file, and modify it
+{
+ KDirWatch watch;
+ const QString existingFile = m_path + QLatin1String("ExistingFile");
+ watch.addFile(existingFile);
+ watch.startScan();
+ if (m_slow) {
+ waitUntilNewSecond();
+ }
+ appendToFile(existingFile);
+ QVERIFY(waitForOneSignal(watch, SIGNAL(dirty(QString)), existingFile));
+}
+
+void KDirWatch_UnitTest::removeAndReAdd()
+{
+ KDirWatch watch;
+ watch.addDir(m_path);
+ watch.startScan();
+ if (watch.internalMethod() != KDirWatch::INotify) {
+ waitUntilNewSecond(); // necessary for mtime checks in scanEntry
+ }
+ const QString file0 = createFile(0);
+ QVERIFY(waitForOneSignal(watch, SIGNAL(dirty(QString)), m_path));
+
+ // Just like KDirLister does: remove the watch, then re-add it.
+ watch.removeDir(m_path);
+ watch.addDir(m_path);
+ if (watch.internalMethod() != KDirWatch::INotify) {
+ waitUntilMTimeChange(m_path); // necessary for FAM and QFSWatcher
+ }
+ const QString file1 = createFile(1);
+ //qDebug() << "created" << file1;
+ QVERIFY(waitForOneSignal(watch, SIGNAL(dirty(QString)), m_path));
+}
+
+void KDirWatch_UnitTest::watchNonExistent()
+{
+ KDirWatch watch;
+ // Watch "subdir", that doesn't exist yet
+ const QString subdir = m_path + QLatin1String("subdir");
+ QVERIFY(!QFile::exists(subdir));
+ watch.addDir(subdir);
+ watch.startScan();
+
+ if (m_slow) {
+ waitUntilNewSecond();
+ }
+
+ // Now create it, KDirWatch should emit created()
+ qDebug() << "Creating" << subdir;
+ QDir().mkdir(subdir);
+
+ QVERIFY(waitForOneSignal(watch, SIGNAL(created(QString)), subdir));
+
+ KDirWatch::statistics();
+
+ // Play with addDir/removeDir, just for fun
+ watch.addDir(subdir);
+ watch.removeDir(subdir);
+ watch.addDir(subdir);
+
+ // Now watch files that don't exist yet
+ const QString file = subdir + QLatin1String("/0");
+ watch.addFile(file); // doesn't exist yet
+ const QString file1 = subdir + QLatin1String("/1");
+ watch.addFile(file1); // doesn't exist yet
+ watch.removeFile(file1); // forget it again
+
+ KDirWatch::statistics();
+
+ QVERIFY(!QFile::exists(file));
+ // Now create it, KDirWatch should emit created
+ qDebug() << "Creating" << file;
+ createFile(file);
+ QVERIFY(waitForOneSignal(watch, SIGNAL(created(QString)), file));
+
+ appendToFile(file);
+ QVERIFY(waitForOneSignal(watch, SIGNAL(dirty(QString)), file));
+
+ // Create the file after all; we're not watching for it, but the dir will emit dirty
+ createFile(file1);
+ QVERIFY(waitForOneSignal(watch, SIGNAL(dirty(QString)), subdir));
+}
+
+void KDirWatch_UnitTest::watchNonExistentWithSingleton()
+{
+ const QString file = QLatin1String("/root/.ssh/authorized_keys");
+ KDirWatch::self()->addFile(file);
+ // When running this test in KDIRWATCH_METHOD=QFSWatch, or when FAM is not available
+ // and we fallback to qfswatch when inotify fails above, we end up creating the fsWatch
+ // in the kdirwatch singleton. Bug 261541 discovered that Qt hanged when deleting fsWatch
+ // once QCoreApp was gone, this is what this test is about.
+}
+
+void KDirWatch_UnitTest::testDelete()
+{
+ const QString file1 = m_path + QLatin1String("del");
+ if (!QFile::exists(file1)) {
+ createFile(file1);
+ }
+ waitUntilMTimeChange(file1);
+
+ // Watch the file, then delete it, KDirWatch will emit deleted (and possibly dirty for the dir, if mtime changed)
+ KDirWatch watch;
+ watch.addFile(file1);
+
+ KDirWatch::statistics();
+
+ QSignalSpy spyDirty(&watch, SIGNAL(dirty(QString)));
+ QFile::remove(file1);
+ QVERIFY(waitForOneSignal(watch, SIGNAL(deleted(QString)), file1));
+ QTest::qWait(40); // just in case delayed processing would emit it
+ QCOMPARE(spyDirty.count(), 0);
+}
+
+void KDirWatch_UnitTest::testDeleteAndRecreateFile() // Useful for /etc/localtime for instance
+{
+ const QString subdir = m_path + QLatin1String("subdir");
+ QDir().mkdir(subdir);
+ const QString file1 = subdir + QLatin1String("/1");
+ if (!QFile::exists(file1)) {
+ createFile(file1);
+ }
+ waitUntilMTimeChange(file1);
+
+ // Watch the file, then delete it, KDirWatch will emit deleted (and possibly dirty for the dir, if mtime changed)
+ KDirWatch watch;
+ watch.addFile(file1);
+
+ //KDE_struct_stat stat_buf;
+ //QCOMPARE(KDE::stat(QFile::encodeName(file1), &stat_buf), 0);
+ //qDebug() << "initial inode" << stat_buf.st_ino;
+
+ // Make sure this even works multiple times, as needed for ksycoca
+ for (int i = 0; i < 5; ++i) {
+
+ QFile::remove(file1);
+ // And recreate immediately, to try and fool KDirWatch with unchanged ctime/mtime ;)
+ // (This emulates the /etc/localtime case)
+ createFile(file1);
+
+ //QCOMPARE(KDE::stat(QFile::encodeName(file1), &stat_buf), 0);
+ //qDebug() << "new inode" << stat_buf.st_ino; // same!
+
+ {
+ QSignalSpy spyDirty(&watch, SIGNAL(dirty(QString)));
+ if(!waitForRecreationSignal(watch, file1)) {
+ // We may get a dirty signal here instead of a deleted/created set.
+ if (spyDirty.isEmpty() || !verifySignalPath(spyDirty, SIGNAL(dirty(QString)), file1)) {
+ QFAIL("Failed to detect file deletion and recreation through either a deleted/created signal pair or through a dirty signal!");
+ }
+ }
+ }
+ }
+
+ waitUntilMTimeChange(file1);
+
+ appendToFile(file1);
+ QVERIFY(waitForOneSignal(watch, SIGNAL(dirty(QString)), file1));
+}
+
+void KDirWatch_UnitTest::testDeleteAndRecreateDir()
+{
+ // Like KDirModelTest::testOverwriteFileWithDir does at the end.
+ // The linux-2.6.31 bug made kdirwatch emit deletion signals about the -new- dir!
+ QTemporaryDir *tempDir1 = new QTemporaryDir(QDir::tempPath() + QLatin1Char('/') + QLatin1String("olddir-"));
+ KDirWatch watch;
+ const QString path1 = tempDir1->path() + QLatin1Char('/');
+ watch.addDir(path1);
+
+ delete tempDir1;
+ QTemporaryDir *tempDir2 = new QTemporaryDir(QDir::tempPath() + QLatin1Char('/') + QLatin1String("newdir-"));
+ const QString path2 = tempDir2->path() + QLatin1Char('/');
+ watch.addDir(path2);
+
+ QVERIFY(waitForOneSignal(watch, SIGNAL(deleted(QString)), path1));
+
+ delete tempDir2;
+}
+
+void KDirWatch_UnitTest::testMoveTo()
+{
+ // This reproduces the famous digikam crash, #222974
+ // A watched file was being rewritten (overwritten by ksavefile),
+ // which gives inotify notifications "moved_to" followed by "delete_self"
+ //
+ // What happened then was that the delayed slotRescan
+ // would adjust things, making it status==Normal but the entry was
+ // listed as a "non-existent sub-entry" for the parent directory.
+ // That's inconsistent, and after removeFile() a dangling sub-entry would be left.
+
+ // Initial data: creating file subdir/1
+ const QString file1 = m_path + QLatin1String("moveTo");
+ createFile(file1);
+
+ KDirWatch watch;
+ watch.addDir(m_path);
+ watch.addFile(file1);
+ watch.startScan();
+
+ if (watch.internalMethod() != KDirWatch::INotify) {
+ waitUntilMTimeChange(m_path);
+ }
+
+ // Atomic rename of "temp" to "file1", much like KAutoSave would do when saving file1 again
+ // ### TODO: this isn't an atomic rename anymore. We need ::rename for that, or API from Qt.
+ const QString filetemp = m_path + QLatin1String("temp");
+ createFile(filetemp);
+ QFile::remove(file1);
+ QVERIFY(QFile::rename(filetemp, file1)); // overwrite file1 with the tempfile
+ qDebug() << "Overwrite file1 with tempfile";
+
+ QSignalSpy spyCreated(&watch, SIGNAL(created(QString)));
+ QSignalSpy spyDirty(&watch, SIGNAL(dirty(QString)));
+ QVERIFY(waitForOneSignal(watch, SIGNAL(dirty(QString)), m_path));
+
+ // Getting created() on an unwatched file is an inotify bonus, it's not part of the requirements.
+ if (watch.internalMethod() == KDirWatch::INotify) {
+ QCOMPARE(spyCreated.count(), 1);
+ QCOMPARE(spyCreated[0][0].toString(), file1);
+
+ QCOMPARE(spyDirty.size(), 2);
+ QCOMPARE(spyDirty[1][0].toString(), filetemp);
+ }
+
+ // make sure we're still watching it
+ appendToFile(file1);
+ QVERIFY(waitForOneSignal(watch, SIGNAL(dirty(QString)), file1));
+
+ //qDebug() << "after created";
+ //KDirWatch::statistics();
+ watch.removeFile(file1); // now we remove it
+ //qDebug() << "after removeFile";
+ //KDirWatch::statistics();
+
+ // Just touch another file to trigger a findSubEntry - this where the crash happened
+ waitUntilMTimeChange(m_path);
+ createFile(filetemp);
+#ifdef Q_OS_WIN
+ if (watch.internalMethod() == KDirWatch::QFSWatch) {
+ QEXPECT_FAIL(nullptr, "QFSWatch fails here on Windows!", Continue);
+ }
+#endif
+ QVERIFY(waitForOneSignal(watch, SIGNAL(dirty(QString)), m_path));
+}
+
+void KDirWatch_UnitTest::nestedEventLoop() // #220153: watch two files, and modify 2nd while in slot for 1st
+{
+ KDirWatch watch;
+
+ const QString file0 = m_path + QLatin1String("nested_0");
+ watch.addFile(file0);
+ const QString file1 = m_path + QLatin1String("nested_1");
+ watch.addFile(file1);
+ watch.startScan();
+
+ if (m_slow) {
+ waitUntilNewSecond();
+ }
+
+ appendToFile(file0);
+
+ // use own spy, to connect it before nestedEventLoopSlot, otherwise it reverses order
+ QSignalSpy spyDirty(&watch, SIGNAL(dirty(QString)));
+ connect(&watch, SIGNAL(dirty(QString)), this, SLOT(nestedEventLoopSlot()));
+ waitForDirtySignal(watch, 1);
+ QVERIFY(spyDirty.count() >= 2);
+ QCOMPARE(spyDirty[0][0].toString(), file0);
+ QCOMPARE(spyDirty[spyDirty.count() - 1][0].toString(), file1);
+}
+
+void KDirWatch_UnitTest::nestedEventLoopSlot()
+{
+ const KDirWatch *const_watch = qobject_cast<const KDirWatch *>(sender());
+ KDirWatch *watch = const_cast<KDirWatch *>(const_watch);
+ // let's not come in this slot again
+ disconnect(watch, SIGNAL(dirty(QString)), this, SLOT(nestedEventLoopSlot()));
+
+ const QString file1 = m_path + QLatin1String("nested_1");
+ appendToFile(file1);
+ //qDebug() << "now waiting for signal";
+ // The nested event processing here was from a messagebox in #220153
+ QList<QVariantList> spy = waitForDirtySignal(*watch, 1);
+ QVERIFY(spy.count() >= 1);
+ QCOMPARE(spy[spy.count() - 1][0].toString(), file1);
+ //qDebug() << "done";
+
+ // Now the user pressed reload...
+ const QString file0 = m_path + QLatin1String("nested_0");
+ watch->removeFile(file0);
+ watch->addFile(file0);
+}
+
+void KDirWatch_UnitTest::testHardlinkChange()
+{
+#ifdef Q_OS_UNIX
+
+ // The unittest for the "detecting hardlink change to /etc/localtime" problem
+ // described on kde-core-devel (2009-07-03).
+ // It shows that watching a specific file doesn't inform us that the file is
+ // being recreated. Better watch the directory, for that.
+ // Well, it works with inotify (and fam - which uses inotify I guess?)
+
+ const QString existingFile = m_path + QLatin1String("ExistingFile");
+ KDirWatch watch;
+ watch.addFile(existingFile);
+ watch.startScan();
+
+ //waitUntilMTimeChange(existingFile);
+ //waitUntilMTimeChange(m_path);
+
+ QFile::remove(existingFile);
+ const QString testFile = m_path + QLatin1String("TestFile");
+ QVERIFY(::link(QFile::encodeName(testFile).constData(), QFile::encodeName(existingFile).constData()) == 0); // make ExistingFile "point" to TestFile
+ QVERIFY(QFile::exists(existingFile));
+
+ QVERIFY(waitForRecreationSignal(watch, existingFile));
+
+ //KDirWatch::statistics();
+
+ // The mtime of the existing file is the one of "TestFile", so it's old.
+ // We won't detect the change then, if we use that as baseline for waiting.
+ // We really need msec granularity, but that requires using statx which isn't available everywhere...
+ waitUntilNewSecond();
+ appendToFile(existingFile);
+ QVERIFY(waitForOneSignal(watch, SIGNAL(dirty(QString)), existingFile));
+#else
+ QSKIP("Unix-specific");
+#endif
+}
+
+void KDirWatch_UnitTest::stopAndRestart()
+{
+ KDirWatch watch;
+ watch.addDir(m_path);
+ watch.startScan();
+
+ waitUntilMTimeChange(m_path);
+
+ watch.stopDirScan(m_path);
+
+ //qDebug() << "create file 2 at" << QDateTime::currentDateTime().toTime_t();
+ const QString file2 = createFile(2);
+ QSignalSpy spyDirty(&watch, SIGNAL(dirty(QString)));
+ QTest::qWait(200);
+ QCOMPARE(spyDirty.count(), 0);// suspended -> no signal
+
+ watch.restartDirScan(m_path);
+
+ QTest::qWait(200);
+
+#ifndef Q_OS_WIN
+ QCOMPARE(spyDirty.count(), 0); // as documented by restartDirScan: no signal
+ // On Windows, however, signals will get emitted, due to the ifdef Q_OS_WIN in the timestamp
+ // comparison ("trust QFSW since the mtime of dirs isn't modified")
+#endif
+
+ KDirWatch::statistics();
+
+ waitUntilMTimeChange(m_path); // necessary for the mtime comparison in scanEntry
+
+ //qDebug() << "create file 3 at" << QDateTime::currentDateTime().toTime_t();
+ const QString file3 = createFile(3);
+#ifdef Q_OS_WIN
+ if (watch.internalMethod() == KDirWatch::QFSWatch) {
+ QEXPECT_FAIL(nullptr, "QFSWatch fails here on Windows!", Continue);
+ }
+#endif
+ QVERIFY(waitForOneSignal(watch, SIGNAL(dirty(QString)), m_path));
+
+ QFile::remove(file2);
+ QFile::remove(file3);
+}
+
+void KDirWatch_UnitTest::shouldIgnoreQrcPaths()
+{
+ const auto oldCwd = QDir::currentPath();
+ QVERIFY(QDir::setCurrent(QDir::homePath()));
+
+ KDirWatch watch;
+ watch.addDir(QDir::homePath());
+ // This triggers bug #374075.
+ watch.addDir(QStringLiteral(":/kio5/newfile-templates"));
+
+ QSignalSpy dirtySpy(&watch, &KDirWatch::dirty);
+
+ QFile file(QStringLiteral("bug374075.txt"));
+ QVERIFY(file.open(QIODevice::WriteOnly));
+ QVERIFY(file.write(QByteArrayLiteral("test")));
+ file.close();
+ QVERIFY(file.exists());
+ QVERIFY(dirtySpy.wait());
+ QVERIFY(dirtySpy.count() > 0);
+ QVERIFY(file.remove());
+ QVERIFY(QDir::setCurrent(oldCwd));
+}
+
+void KDirWatch_UnitTest::benchCreateTree()
+{
+ QTemporaryDir dir;
+
+ QBENCHMARK {
+ createDirectoryTree(dir.path());
+ }
+}
+
+void KDirWatch_UnitTest::benchCreateWatcher()
+{
+ QTemporaryDir dir;
+ createDirectoryTree(dir.path());
+
+ QBENCHMARK {
+ KDirWatch watch;
+ watch.addDir(dir.path(), KDirWatch::WatchSubDirs | KDirWatch:: WatchFiles);
+ }
+}
+
+void KDirWatch_UnitTest::benchNotifyWatcher()
+{
+ QTemporaryDir dir;
+ // create the dir once upfront
+ auto numFiles = createDirectoryTree(dir.path());
+ waitUntilMTimeChange(dir.path());
+
+ KDirWatch watch;
+ watch.addDir(dir.path(), KDirWatch::WatchSubDirs | KDirWatch:: WatchFiles);
+
+ // now touch all the files repeatedly and wait for the dirty updates to come in
+ QSignalSpy spy(&watch, &KDirWatch::dirty);
+ QBENCHMARK {
+ createDirectoryTree(dir.path());
+ QTRY_COMPARE_WITH_TIMEOUT(spy.count(), numFiles, s_maxTries * 50 * 2);
+ spy.clear();
+ }
+}
+
+#include "kdirwatch_unittest.moc"
--- /dev/null
+/* This file is part of the KDE Frameworks
+
+ Copyright (C) 2013 John Layt <jlayt@kde.org>,
+ Copyright (C) 2010 Michael Leupold <lemma@confuego.org>
+ Copyright (C) 2009 Michael Pyne <mpyne@kde.org>
+ Copyright (C) 2008 Albert Astals Cid <aacid@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include "kformattest.h"
+
+#include <QtTest>
+
+#include "kformat.h"
+
+void KFormatTest::formatByteSize()
+{
+ QLocale locale(QLocale::c());
+ locale.setNumberOptions(QLocale::DefaultNumberOptions); // Qt >= 5.6 sets QLocale::OmitGroupSeparator for the C locale
+ KFormat format(locale);
+
+ QCOMPARE(format.formatByteSize(0), QStringLiteral("0 B"));
+ QCOMPARE(format.formatByteSize(50), QStringLiteral("50 B"));
+ QCOMPARE(format.formatByteSize(500), QStringLiteral("500 B"));
+ QCOMPARE(format.formatByteSize(5000), QStringLiteral("4.9 KiB"));
+ QCOMPARE(format.formatByteSize(50000), QStringLiteral("48.8 KiB"));
+ QCOMPARE(format.formatByteSize(500000), QStringLiteral("488.3 KiB"));
+ QCOMPARE(format.formatByteSize(5000000), QStringLiteral("4.8 MiB"));
+ QCOMPARE(format.formatByteSize(50000000), QStringLiteral("47.7 MiB"));
+ QCOMPARE(format.formatByteSize(500000000), QStringLiteral("476.8 MiB"));
+#if (defined(__WORDSIZE) && (__WORDSIZE == 64)) || defined (_LP64) || defined(__LP64__) || defined(__ILP64__)
+ QCOMPARE(format.formatByteSize(5000000000), QStringLiteral("4.7 GiB"));
+ QCOMPARE(format.formatByteSize(50000000000), QStringLiteral("46.6 GiB"));
+ QCOMPARE(format.formatByteSize(500000000000), QStringLiteral("465.7 GiB"));
+ QCOMPARE(format.formatByteSize(5000000000000), QStringLiteral("4.5 TiB"));
+ QCOMPARE(format.formatByteSize(50000000000000), QStringLiteral("45.5 TiB"));
+ QCOMPARE(format.formatByteSize(500000000000000), QStringLiteral("454.7 TiB"));
+#endif
+
+ QCOMPARE(format.formatByteSize(1024.0, 1, KFormat::IECBinaryDialect), QStringLiteral("1.0 KiB"));
+ QCOMPARE(format.formatByteSize(1023.0, 1, KFormat::IECBinaryDialect), QStringLiteral("1,023 B"));
+ QCOMPARE(format.formatByteSize(1163000.0, 1, KFormat::IECBinaryDialect), QStringLiteral("1.1 MiB")); // 1.2 metric
+
+ QCOMPARE(format.formatByteSize(-1024.0, 1, KFormat::IECBinaryDialect), QStringLiteral("-1.0 KiB"));
+ QCOMPARE(format.formatByteSize(-1023.0, 1, KFormat::IECBinaryDialect), QStringLiteral("-1,023 B"));
+ QCOMPARE(format.formatByteSize(-1163000.0, 1, KFormat::IECBinaryDialect), QStringLiteral("-1.1 MiB")); // 1.2 metric
+
+ QCOMPARE(format.formatByteSize(1024.0, 1, KFormat::JEDECBinaryDialect), QStringLiteral("1.0 KB"));
+ QCOMPARE(format.formatByteSize(1023.0, 1, KFormat::JEDECBinaryDialect), QStringLiteral("1,023 B"));
+ QCOMPARE(format.formatByteSize(1163000.0, 1, KFormat::JEDECBinaryDialect), QStringLiteral("1.1 MB"));
+
+ QCOMPARE(format.formatByteSize(-1024.0, 1, KFormat::JEDECBinaryDialect), QStringLiteral("-1.0 KB"));
+ QCOMPARE(format.formatByteSize(-1023.0, 1, KFormat::JEDECBinaryDialect), QStringLiteral("-1,023 B"));
+ QCOMPARE(format.formatByteSize(-1163000.0, 1, KFormat::JEDECBinaryDialect), QStringLiteral("-1.1 MB"));
+
+ QCOMPARE(format.formatByteSize(1024.0, 1, KFormat::MetricBinaryDialect), QStringLiteral("1.0 kB"));
+ QCOMPARE(format.formatByteSize(1023.0, 1, KFormat::MetricBinaryDialect), QStringLiteral("1.0 kB"));
+ QCOMPARE(format.formatByteSize(1163000.0, 1, KFormat::MetricBinaryDialect), QStringLiteral("1.2 MB"));
+
+ QCOMPARE(format.formatByteSize(-1024.0, 1, KFormat::MetricBinaryDialect), QStringLiteral("-1.0 kB"));
+ QCOMPARE(format.formatByteSize(-1023.0, 1, KFormat::MetricBinaryDialect), QStringLiteral("-1.0 kB"));
+ QCOMPARE(format.formatByteSize(-1163000.0, 1, KFormat::MetricBinaryDialect), QStringLiteral("-1.2 MB"));
+
+ // Ensure all units are represented
+ QCOMPARE(format.formatByteSize(2.0e9, 1, KFormat::MetricBinaryDialect), QStringLiteral("2.0 GB"));
+ QCOMPARE(format.formatByteSize(3.2e12, 1, KFormat::MetricBinaryDialect), QStringLiteral("3.2 TB"));
+ QCOMPARE(format.formatByteSize(4.1e15, 1, KFormat::MetricBinaryDialect), QStringLiteral("4.1 PB"));
+ QCOMPARE(format.formatByteSize(6.7e18, 2, KFormat::MetricBinaryDialect), QStringLiteral("6.70 EB"));
+ QCOMPARE(format.formatByteSize(5.6e20, 2, KFormat::MetricBinaryDialect), QStringLiteral("560.00 EB"));
+ QCOMPARE(format.formatByteSize(2.3e22, 2, KFormat::MetricBinaryDialect), QStringLiteral("23.00 ZB"));
+ QCOMPARE(format.formatByteSize(1.0e27, 1, KFormat::MetricBinaryDialect), QStringLiteral("1,000.0 YB"));
+
+ // Spattering of specific units
+ QCOMPARE(format.formatByteSize(823000, 3, KFormat::IECBinaryDialect, KFormat::UnitMegaByte), QStringLiteral("0.785 MiB"));
+ QCOMPARE(format.formatByteSize(1234034.0, 4, KFormat::JEDECBinaryDialect, KFormat::UnitByte), QStringLiteral("1,234,034 B"));
+
+ // Check examples from the documentation
+ QCOMPARE(format.formatByteSize(1000, 1, KFormat::MetricBinaryDialect, KFormat::UnitKiloByte), QStringLiteral("1.0 kB"));
+ QCOMPARE(format.formatByteSize(1000, 1, KFormat::IECBinaryDialect, KFormat::UnitKiloByte), QStringLiteral("1.0 KiB"));
+ QCOMPARE(format.formatByteSize(1000, 1, KFormat::JEDECBinaryDialect, KFormat::UnitKiloByte), QStringLiteral("1.0 KB"));
+}
+
+void KFormatTest::formatValue()
+{
+ QLocale locale(QLocale::c());
+ locale.setNumberOptions(QLocale::DefaultNumberOptions); // Qt >= 5.6 sets QLocale::OmitGroupSeparator for the C locale
+ KFormat format(locale);
+
+ // Check examples from the documentation
+ QCOMPARE(format.formatValue(1000, KFormat::Unit::Byte, 1, KFormat::UnitPrefix::Kilo, KFormat::MetricBinaryDialect), QStringLiteral("1.0 kB"));
+ QCOMPARE(format.formatValue(1000, KFormat::Unit::Byte, 1, KFormat::UnitPrefix::Kilo, KFormat::IECBinaryDialect), QStringLiteral("1.0 KiB"));
+ QCOMPARE(format.formatValue(1000, KFormat::Unit::Byte, 1, KFormat::UnitPrefix::Kilo, KFormat::JEDECBinaryDialect), QStringLiteral("1.0 KB"));
+
+ // Check examples from the documentation
+ QCOMPARE(format.formatValue(1000, KFormat::Unit::Bit, 1, KFormat::UnitPrefix::Kilo, KFormat::MetricBinaryDialect), QStringLiteral("1.0 kbit"));
+ QCOMPARE(format.formatValue(1000, QStringLiteral("bit"), 1, KFormat::UnitPrefix::Kilo), QStringLiteral("1.0 kbit"));
+ QCOMPARE(format.formatValue(1000, QStringLiteral("bit/s"), 1, KFormat::UnitPrefix::Kilo), QStringLiteral("1.0 kbit/s"));
+
+ QCOMPARE(format.formatValue(100, QStringLiteral("bit/s")), QStringLiteral("100.0 bit/s"));
+ QCOMPARE(format.formatValue(1000, QStringLiteral("bit/s")), QStringLiteral("1.0 kbit/s"));
+ QCOMPARE(format.formatValue(10e3, QStringLiteral("bit/s")), QStringLiteral("10.0 kbit/s"));
+ QCOMPARE(format.formatValue(10e6, QStringLiteral("bit/s")), QStringLiteral("10.0 Mbit/s"));
+
+ QCOMPARE(format.formatValue(0.010, KFormat::Unit::Meter, 1, KFormat::UnitPrefix::Milli, KFormat::MetricBinaryDialect), QStringLiteral("10.0 mm"));
+ QCOMPARE(format.formatValue(10.12e-6, KFormat::Unit::Meter, 2, KFormat::UnitPrefix::Micro, KFormat::MetricBinaryDialect), QStringLiteral("10.12 µm"));
+ QCOMPARE(format.formatValue(10.55e-6, KFormat::Unit::Meter, 1, KFormat::UnitPrefix::AutoAdjust, KFormat::MetricBinaryDialect), QStringLiteral("10.6 µm"));
+}
+
+enum TimeConstants {
+ MSecsInDay = 86400000,
+ MSecsInHour = 3600000,
+ MSecsInMinute = 60000,
+ MSecsInSecond = 1000
+};
+
+void KFormatTest::formatDuration()
+{
+ KFormat format(QLocale::c());
+
+ quint64 singleSecond = 3 * MSecsInSecond + 700;
+ quint64 doubleSecond = 33 * MSecsInSecond + 700;
+ quint64 singleMinute = 8 * MSecsInMinute + 3 * MSecsInSecond + 700;
+ quint64 doubleMinute = 38 * MSecsInMinute + 3 * MSecsInSecond + 700;
+ quint64 singleHour = 5 * MSecsInHour + 8 * MSecsInMinute + 3 * MSecsInSecond + 700;
+ quint64 doubleHour = 15 * MSecsInHour + 8 * MSecsInMinute + 3 * MSecsInSecond + 700;
+ quint64 singleDay = 1 * MSecsInDay + 5 * MSecsInHour + 8 * MSecsInMinute + 3 * MSecsInSecond + 700;
+ quint64 doubleDay = 10 * MSecsInDay + 5 * MSecsInHour + 8 * MSecsInMinute + 3 * MSecsInSecond + 700;
+ quint64 roundingIssues = 2* MSecsInHour + 59 * MSecsInMinute + 59 * MSecsInSecond + 900;
+ quint64 largeValue = 9999999999;
+
+ // Default format
+ QCOMPARE(format.formatDuration(singleSecond), QStringLiteral("0:00:04"));
+ QCOMPARE(format.formatDuration(doubleSecond), QStringLiteral("0:00:34"));
+ QCOMPARE(format.formatDuration(singleMinute), QStringLiteral("0:08:04"));
+ QCOMPARE(format.formatDuration(doubleMinute), QStringLiteral("0:38:04"));
+ QCOMPARE(format.formatDuration(singleHour), QStringLiteral("5:08:04"));
+ QCOMPARE(format.formatDuration(doubleHour), QStringLiteral("15:08:04"));
+ QCOMPARE(format.formatDuration(singleDay), QStringLiteral("29:08:04"));
+ QCOMPARE(format.formatDuration(doubleDay), QStringLiteral("245:08:04"));
+ QCOMPARE(format.formatDuration(roundingIssues), QStringLiteral("3:00:00"));
+ QCOMPARE(format.formatDuration(largeValue), QStringLiteral("2777:46:40"));
+
+
+ // ShowMilliseconds format
+ KFormat::DurationFormatOptions options = KFormat::ShowMilliseconds;
+ QCOMPARE(format.formatDuration(singleSecond, options), QStringLiteral("0:00:03.700"));
+ QCOMPARE(format.formatDuration(doubleSecond, options), QStringLiteral("0:00:33.700"));
+ QCOMPARE(format.formatDuration(singleMinute, options), QStringLiteral("0:08:03.700"));
+ QCOMPARE(format.formatDuration(doubleMinute, options), QStringLiteral("0:38:03.700"));
+ QCOMPARE(format.formatDuration(singleHour, options), QStringLiteral("5:08:03.700"));
+ QCOMPARE(format.formatDuration(doubleHour, options), QStringLiteral("15:08:03.700"));
+ QCOMPARE(format.formatDuration(singleDay, options), QStringLiteral("29:08:03.700"));
+ QCOMPARE(format.formatDuration(doubleDay, options), QStringLiteral("245:08:03.700"));
+ QCOMPARE(format.formatDuration(roundingIssues, options), QStringLiteral("2:59:59.900"));
+ QCOMPARE(format.formatDuration(largeValue,options), QStringLiteral("2777:46:39.999"));
+
+
+ // HideSeconds format
+ options = KFormat::HideSeconds;
+ QCOMPARE(format.formatDuration(singleSecond, options), QStringLiteral("0:00"));
+ QCOMPARE(format.formatDuration(doubleSecond, options), QStringLiteral("0:01"));
+ QCOMPARE(format.formatDuration(singleMinute, options), QStringLiteral("0:08"));
+ QCOMPARE(format.formatDuration(doubleMinute, options), QStringLiteral("0:38"));
+ QCOMPARE(format.formatDuration(singleHour, options), QStringLiteral("5:08"));
+ QCOMPARE(format.formatDuration(doubleHour, options), QStringLiteral("15:08"));
+ QCOMPARE(format.formatDuration(singleDay, options), QStringLiteral("29:08"));
+ QCOMPARE(format.formatDuration(doubleDay, options), QStringLiteral("245:08"));
+ QCOMPARE(format.formatDuration(roundingIssues, options), QStringLiteral("3:00"));
+ QCOMPARE(format.formatDuration(largeValue,options), QStringLiteral("2777:47"));
+
+
+ // FoldHours format
+ options = KFormat::FoldHours;
+ QCOMPARE(format.formatDuration(singleSecond, options), QStringLiteral("0:04"));
+ QCOMPARE(format.formatDuration(doubleSecond, options), QStringLiteral("0:34"));
+ QCOMPARE(format.formatDuration(singleMinute, options), QStringLiteral("8:04"));
+ QCOMPARE(format.formatDuration(doubleMinute, options), QStringLiteral("38:04"));
+ QCOMPARE(format.formatDuration(singleHour, options), QStringLiteral("308:04"));
+ QCOMPARE(format.formatDuration(doubleHour, options), QStringLiteral("908:04"));
+ QCOMPARE(format.formatDuration(singleDay, options), QStringLiteral("1748:04"));
+ QCOMPARE(format.formatDuration(doubleDay, options), QStringLiteral("14708:04"));
+ QCOMPARE(format.formatDuration(roundingIssues, options), QStringLiteral("180:00"));
+ QCOMPARE(format.formatDuration(largeValue,options), QStringLiteral("166666:40"));
+
+
+ // FoldHours ShowMilliseconds format
+ options = KFormat::FoldHours;
+ options = options | KFormat::ShowMilliseconds;
+ QCOMPARE(format.formatDuration(singleSecond, options), QStringLiteral("0:03.700"));
+ QCOMPARE(format.formatDuration(doubleSecond, options), QStringLiteral("0:33.700"));
+ QCOMPARE(format.formatDuration(singleMinute, options), QStringLiteral("8:03.700"));
+ QCOMPARE(format.formatDuration(doubleMinute, options), QStringLiteral("38:03.700"));
+ QCOMPARE(format.formatDuration(singleHour, options), QStringLiteral("308:03.700"));
+ QCOMPARE(format.formatDuration(doubleHour, options), QStringLiteral("908:03.700"));
+ QCOMPARE(format.formatDuration(singleDay, options), QStringLiteral("1748:03.700"));
+ QCOMPARE(format.formatDuration(doubleDay, options), QStringLiteral("14708:03.700"));
+ QCOMPARE(format.formatDuration(roundingIssues, options), QStringLiteral("179:59.900"));
+ QCOMPARE(format.formatDuration(largeValue,options), QStringLiteral("166666:39.999"));
+
+
+ // InitialDuration format
+ options = KFormat::InitialDuration;
+ QCOMPARE(format.formatDuration(singleSecond, options), QStringLiteral("0h00m04s"));
+ QCOMPARE(format.formatDuration(doubleSecond, options), QStringLiteral("0h00m34s"));
+ QCOMPARE(format.formatDuration(singleMinute, options), QStringLiteral("0h08m04s"));
+ QCOMPARE(format.formatDuration(doubleMinute, options), QStringLiteral("0h38m04s"));
+ QCOMPARE(format.formatDuration(singleHour, options), QStringLiteral("5h08m04s"));
+ QCOMPARE(format.formatDuration(doubleHour, options), QStringLiteral("15h08m04s"));
+ QCOMPARE(format.formatDuration(singleDay, options), QStringLiteral("29h08m04s"));
+ QCOMPARE(format.formatDuration(doubleDay, options), QStringLiteral("245h08m04s"));
+ QCOMPARE(format.formatDuration(roundingIssues, options), QStringLiteral("3h00m00s"));
+ QCOMPARE(format.formatDuration(largeValue,options), QStringLiteral("2777h46m40s"));
+
+
+ // InitialDuration and ShowMilliseconds format
+ options = KFormat::InitialDuration;
+ options = options | KFormat::ShowMilliseconds;
+ QCOMPARE(format.formatDuration(singleSecond, options), QStringLiteral("0h00m03.700s"));
+ QCOMPARE(format.formatDuration(doubleSecond, options), QStringLiteral("0h00m33.700s"));
+ QCOMPARE(format.formatDuration(singleMinute, options), QStringLiteral("0h08m03.700s"));
+ QCOMPARE(format.formatDuration(doubleMinute, options), QStringLiteral("0h38m03.700s"));
+ QCOMPARE(format.formatDuration(singleHour, options), QStringLiteral("5h08m03.700s"));
+ QCOMPARE(format.formatDuration(doubleHour, options), QStringLiteral("15h08m03.700s"));
+ QCOMPARE(format.formatDuration(singleDay, options), QStringLiteral("29h08m03.700s"));
+ QCOMPARE(format.formatDuration(doubleDay, options), QStringLiteral("245h08m03.700s"));
+ QCOMPARE(format.formatDuration(roundingIssues, options), QStringLiteral("2h59m59.900s"));
+ QCOMPARE(format.formatDuration(largeValue,options), QStringLiteral("2777h46m39.999s"));
+
+
+ // InitialDuration and HideSeconds format
+ options = KFormat::InitialDuration;
+ options = options | KFormat::HideSeconds;
+ QCOMPARE(format.formatDuration(singleSecond, options), QStringLiteral("0h00m"));
+ QCOMPARE(format.formatDuration(doubleSecond, options), QStringLiteral("0h01m"));
+ QCOMPARE(format.formatDuration(singleMinute, options), QStringLiteral("0h08m"));
+ QCOMPARE(format.formatDuration(doubleMinute, options), QStringLiteral("0h38m"));
+ QCOMPARE(format.formatDuration(singleHour, options), QStringLiteral("5h08m"));
+ QCOMPARE(format.formatDuration(doubleHour, options), QStringLiteral("15h08m"));
+ QCOMPARE(format.formatDuration(singleDay, options), QStringLiteral("29h08m"));
+ QCOMPARE(format.formatDuration(doubleDay, options), QStringLiteral("245h08m"));
+ QCOMPARE(format.formatDuration(roundingIssues, options), QStringLiteral("3h00m"));
+ QCOMPARE(format.formatDuration(largeValue,options), QStringLiteral("2777h47m"));
+
+
+ // InitialDuration and FoldHours format
+ options = KFormat::InitialDuration;
+ options = options | KFormat::FoldHours;
+ QCOMPARE(format.formatDuration(singleSecond, options), QStringLiteral("0m04s"));
+ QCOMPARE(format.formatDuration(doubleSecond, options), QStringLiteral("0m34s"));
+ QCOMPARE(format.formatDuration(singleMinute, options), QStringLiteral("8m04s"));
+ QCOMPARE(format.formatDuration(doubleMinute, options), QStringLiteral("38m04s"));
+ QCOMPARE(format.formatDuration(singleHour, options), QStringLiteral("308m04s"));
+ QCOMPARE(format.formatDuration(doubleHour, options), QStringLiteral("908m04s"));
+ QCOMPARE(format.formatDuration(singleDay, options), QStringLiteral("1748m04s"));
+ QCOMPARE(format.formatDuration(doubleDay, options), QStringLiteral("14708m04s"));
+ QCOMPARE(format.formatDuration(roundingIssues, options), QStringLiteral("180m00s"));
+ QCOMPARE(format.formatDuration(largeValue,options), QStringLiteral("166666m40s"));
+
+
+ // InitialDuration and FoldHours and ShowMilliseconds format
+ options = KFormat::InitialDuration;
+ options = options | KFormat::FoldHours | KFormat::ShowMilliseconds;
+ QCOMPARE(format.formatDuration(singleSecond, options), QStringLiteral("0m03.700s"));
+ QCOMPARE(format.formatDuration(doubleSecond, options), QStringLiteral("0m33.700s"));
+ QCOMPARE(format.formatDuration(singleMinute, options), QStringLiteral("8m03.700s"));
+ QCOMPARE(format.formatDuration(doubleMinute, options), QStringLiteral("38m03.700s"));
+ QCOMPARE(format.formatDuration(singleHour, options), QStringLiteral("308m03.700s"));
+ QCOMPARE(format.formatDuration(doubleHour, options), QStringLiteral("908m03.700s"));
+ QCOMPARE(format.formatDuration(singleDay, options), QStringLiteral("1748m03.700s"));
+ QCOMPARE(format.formatDuration(doubleDay, options), QStringLiteral("14708m03.700s"));
+ QCOMPARE(format.formatDuration(roundingIssues, options), QStringLiteral("179m59.900s"));
+ QCOMPARE(format.formatDuration(largeValue,options), QStringLiteral("166666m39.999s"));
+}
+
+void KFormatTest::formatDecimalDuration()
+{
+ KFormat format(QLocale::c());
+
+ QCOMPARE(format.formatDecimalDuration(10), QStringLiteral("10 millisecond(s)"));
+ QCOMPARE(format.formatDecimalDuration(10, 3), QStringLiteral("10 millisecond(s)"));
+ QCOMPARE(format.formatDecimalDuration(1 * MSecsInSecond + 10), QStringLiteral("1.01 seconds"));
+ QCOMPARE(format.formatDecimalDuration(1 * MSecsInSecond + 1, 3), QStringLiteral("1.001 seconds"));
+ QCOMPARE(format.formatDecimalDuration(1 * MSecsInMinute + 10 * MSecsInSecond), QStringLiteral("1.17 minutes"));
+ QCOMPARE(format.formatDecimalDuration(1 * MSecsInMinute + 10 * MSecsInSecond, 3), QStringLiteral("1.167 minutes"));
+ QCOMPARE(format.formatDecimalDuration(1 * MSecsInHour + 10 * MSecsInMinute), QStringLiteral("1.17 hours"));
+ QCOMPARE(format.formatDecimalDuration(1 * MSecsInHour + 10 * MSecsInMinute, 3), QStringLiteral("1.167 hours"));
+ QCOMPARE(format.formatDecimalDuration(1 * MSecsInDay + 10 * MSecsInHour), QStringLiteral("1.42 days"));
+ QCOMPARE(format.formatDecimalDuration(1 * MSecsInDay + 10 * MSecsInHour, 3), QStringLiteral("1.417 days"));
+}
+
+void KFormatTest::formatSpelloutDuration()
+{
+ KFormat format(QLocale::c());
+
+ QCOMPARE(format.formatSpelloutDuration(1000), QStringLiteral("1 second(s)"));
+ QCOMPARE(format.formatSpelloutDuration(5000), QStringLiteral("5 second(s)"));
+ QCOMPARE(format.formatSpelloutDuration(60000), QStringLiteral("1 minute(s)"));
+ QCOMPARE(format.formatSpelloutDuration(300000), QStringLiteral("5 minute(s)"));
+ QCOMPARE(format.formatSpelloutDuration(3600000), QStringLiteral("1 hour(s)"));
+ QCOMPARE(format.formatSpelloutDuration(18000000), QStringLiteral("5 hour(s)"));
+ QCOMPARE(format.formatSpelloutDuration(75000), QStringLiteral("1 minute(s) and 15 second(s)"));
+ // Problematic case #1 (there is a reference to this case on kformat.cpp)
+ QCOMPARE(format.formatSpelloutDuration(119999), QStringLiteral("2 minute(s)"));
+ // This case is strictly 2 hours, 15 minutes and 59 seconds. However, since the range is
+ // pretty high between hours and seconds, formatSpelloutDuration always omits seconds when there
+ // are hours in scene.
+ QCOMPARE(format.formatSpelloutDuration(8159000), QStringLiteral("2 hour(s) and 15 minute(s)"));
+ // This case is strictly 1 hour and 10 seconds. For the same reason, formatSpelloutDuration
+ // detects that 10 seconds is just garbage compared to 1 hour, and omits it on the result.
+ QCOMPARE(format.formatSpelloutDuration(3610000), QStringLiteral("1 hour(s)"));
+}
+
+void KFormatTest::formatRelativeDate()
+{
+ KFormat format(QLocale::c());
+
+ QDate testDate = QDate::currentDate();
+ QCOMPARE(format.formatRelativeDate(testDate, QLocale::LongFormat), QStringLiteral("Today"));
+ QCOMPARE(format.formatRelativeDate(testDate, QLocale::ShortFormat), QStringLiteral("Today"));
+ QCOMPARE(format.formatRelativeDate(testDate, QLocale::NarrowFormat), QStringLiteral("Today"));
+
+ testDate = QDate::currentDate().addDays(1);
+ QCOMPARE(format.formatRelativeDate(testDate, QLocale::LongFormat), QStringLiteral("Tomorrow"));
+ QCOMPARE(format.formatRelativeDate(testDate, QLocale::ShortFormat), QStringLiteral("Tomorrow"));
+ QCOMPARE(format.formatRelativeDate(testDate, QLocale::NarrowFormat), QStringLiteral("Tomorrow"));
+
+ testDate = QDate::currentDate().addDays(-1);
+ QCOMPARE(format.formatRelativeDate(testDate, QLocale::LongFormat), QStringLiteral("Yesterday"));
+ QCOMPARE(format.formatRelativeDate(testDate, QLocale::ShortFormat), QStringLiteral("Yesterday"));
+ QCOMPARE(format.formatRelativeDate(testDate, QLocale::NarrowFormat), QStringLiteral("Yesterday"));
+
+ // Relative dates within a week are up to translators but there's no
+ // expectation that day names are shortened -- per the API docs, the date
+ // format is only used when the date is outside the relative window
+ testDate = QDate::currentDate().addDays(-7);
+ QCOMPARE(format.formatRelativeDate(testDate, QLocale::LongFormat),
+ QStringLiteral("Last %1").arg(QLocale::c().dayName(testDate.dayOfWeek(), QLocale::LongFormat)));
+ QCOMPARE(format.formatRelativeDate(testDate, QLocale::ShortFormat),
+ QStringLiteral("Last %1").arg(QLocale::c().dayName(testDate.dayOfWeek(), QLocale::LongFormat)));
+ QCOMPARE(format.formatRelativeDate(testDate, QLocale::NarrowFormat),
+ QStringLiteral("Last %1").arg(QLocale::c().dayName(testDate.dayOfWeek(), QLocale::LongFormat)));
+
+ testDate = QDate::currentDate().addDays(7);
+ QCOMPARE(format.formatRelativeDate(testDate, QLocale::LongFormat),
+ QStringLiteral("Next %1").arg(QLocale::c().dayName(testDate.dayOfWeek(), QLocale::LongFormat)));
+ QCOMPARE(format.formatRelativeDate(testDate, QLocale::ShortFormat),
+ QStringLiteral("Next %1").arg(QLocale::c().dayName(testDate.dayOfWeek(), QLocale::LongFormat)));
+ QCOMPARE(format.formatRelativeDate(testDate, QLocale::NarrowFormat),
+ QStringLiteral("Next %1").arg(QLocale::c().dayName(testDate.dayOfWeek(), QLocale::LongFormat)));
+
+ testDate = QDate::currentDate().addDays(-8);
+ QCOMPARE(format.formatRelativeDate(testDate, QLocale::LongFormat),
+ QLocale::c().toString(testDate, QLocale::LongFormat));
+ QCOMPARE(format.formatRelativeDate(testDate, QLocale::ShortFormat),
+ QLocale::c().toString(testDate, QLocale::ShortFormat));
+ QCOMPARE(format.formatRelativeDate(testDate, QLocale::NarrowFormat),
+ QLocale::c().toString(testDate, QLocale::NarrowFormat));
+
+ testDate = QDate::currentDate().addDays(8);
+ QCOMPARE(format.formatRelativeDate(testDate, QLocale::LongFormat),
+ QLocale::c().toString(testDate, QLocale::LongFormat));
+ QCOMPARE(format.formatRelativeDate(testDate, QLocale::ShortFormat),
+ QLocale::c().toString(testDate, QLocale::ShortFormat));
+ QCOMPARE(format.formatRelativeDate(testDate, QLocale::NarrowFormat),
+ QLocale::c().toString(testDate, QLocale::NarrowFormat));
+
+ testDate = QDate(); // invalid date
+ QCOMPARE(format.formatRelativeDate(testDate, QLocale::LongFormat), QStringLiteral("Invalid date"));
+
+ QDateTime testDateTime = QDateTime(QDate::currentDate(), QTime(3, 0, 0));
+ QCOMPARE(format.formatRelativeDateTime(testDateTime, QLocale::ShortFormat), QStringLiteral("Today, 03:00:00"));
+
+ testDateTime = QDateTime(QDate::currentDate().addDays(8), QTime(3, 0, 0));
+ QCOMPARE(format.formatRelativeDateTime(testDateTime, QLocale::LongFormat),
+ QLocale::c().toString(testDateTime, QLocale::LongFormat));
+}
+
+QTEST_MAIN(KFormatTest)
--- /dev/null
+/* This file is part of the KDE Frameworks
+
+ Copyright (C) 2013 John Layt <jlayt@kde.org>,
+ Copyright (C) 2010 Michael Leupold <lemma@confuego.org>
+ Copyright (C) 2009 Michael Pyne <mpyne@kde.org>
+ Copyright (C) 2008 Albert Astals Cid <aacid@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef KFORMATTEST_H
+#define KFORMATTEST_H
+
+#include <QObject>
+
+class KFormatTest : public QObject
+{
+ Q_OBJECT
+
+private Q_SLOTS:
+
+ void formatByteSize();
+ void formatDuration();
+ void formatDecimalDuration();
+ void formatSpelloutDuration();
+ void formatRelativeDate();
+ void formatValue();
+};
+
+#endif // KFORMATTEST_H
--- /dev/null
+/* This file is part of the KDE project
+ Copyright (C) 2006 Kevin Ottens <ervin@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+
+*/
+
+#include "kjobtest.h"
+
+#include <QTimer>
+#include <QSignalSpy>
+#include <QTest>
+
+QTEST_MAIN(KJobTest)
+
+KJobTest::KJobTest()
+ : loop(this)
+{
+
+}
+
+void KJobTest::testEmitResult_data()
+{
+ QTest::addColumn<int>("errorCode");
+ QTest::addColumn<QString>("errorText");
+
+ QTest::newRow("no error") << int(KJob::NoError) << QString();
+ QTest::newRow("error no text") << 2 << QString();
+ QTest::newRow("error with text") << 6 << "oops! an error? naaah, really?";
+}
+
+void KJobTest::testEmitResult()
+{
+ TestJob *job = new TestJob;
+
+ connect(job, &KJob::result, this, &KJobTest::slotResult);
+
+ QFETCH(int, errorCode);
+ QFETCH(QString, errorText);
+
+ job->setError(errorCode);
+ job->setErrorText(errorText);
+
+ QSignalSpy destroyed_spy(job, SIGNAL(destroyed(QObject*)));
+ job->start();
+ loop.exec();
+
+ QCOMPARE(m_lastError, errorCode);
+ QCOMPARE(m_lastErrorText, errorText);
+
+ // Verify that the job is not deleted immediately...
+ QCOMPARE(destroyed_spy.size(), 0);
+ QTimer::singleShot(0, &loop, SLOT(quit()));
+ // ... but when we enter the event loop again.
+ loop.exec();
+ QCOMPARE(destroyed_spy.size(), 1);
+}
+
+void KJobTest::testProgressTracking()
+{
+ TestJob *testJob = new TestJob;
+ KJob *job = testJob;
+
+ qRegisterMetaType<KJob *>("KJob*");
+ qRegisterMetaType<qulonglong>("qulonglong");
+
+ QSignalSpy processed_spy(job, SIGNAL(processedAmount(KJob*,KJob::Unit,qulonglong)));
+ QSignalSpy total_spy(job, SIGNAL(totalAmount(KJob*,KJob::Unit,qulonglong)));
+ QSignalSpy percent_spy(job, SIGNAL(percent(KJob*,ulong)));
+
+ /* Process a first item. Corresponding signal should be emitted.
+ * Total size didn't change.
+ * Since the total size is unknown, no percent signal is emitted.
+ */
+ testJob->setProcessedSize(1);
+
+ QCOMPARE(processed_spy.size(), 1);
+ QCOMPARE(processed_spy.at(0).at(0).value<KJob *>(), static_cast<KJob *>(job));
+ QCOMPARE(processed_spy.at(0).at(2).value<qulonglong>(), qulonglong(1));
+ QCOMPARE(total_spy.size(), 0);
+ QCOMPARE(percent_spy.size(), 0);
+
+ /* Now, we know the total size. It's signaled.
+ * The new percentage is signaled too.
+ */
+ testJob->setTotalSize(10);
+
+ QCOMPARE(processed_spy.size(), 1);
+ QCOMPARE(total_spy.size(), 1);
+ QCOMPARE(total_spy.at(0).at(0).value<KJob *>(), job);
+ QCOMPARE(total_spy.at(0).at(2).value<qulonglong>(), qulonglong(10));
+ QCOMPARE(percent_spy.size(), 1);
+ QCOMPARE(percent_spy.at(0).at(0).value<KJob *>(), job);
+ QCOMPARE(percent_spy.at(0).at(1).value<unsigned long>(), static_cast<unsigned long>(10));
+
+ /* We announce a new percentage by hand.
+ * Total, and processed didn't change, so no signal is emitted for them.
+ */
+ testJob->setPercent(15);
+
+ QCOMPARE(processed_spy.size(), 1);
+ QCOMPARE(total_spy.size(), 1);
+ QCOMPARE(percent_spy.size(), 2);
+ QCOMPARE(percent_spy.at(1).at(0).value<KJob *>(), job);
+ QCOMPARE(percent_spy.at(1).at(1).value<unsigned long>(), static_cast<unsigned long>(15));
+
+ /* We make some progress.
+ * Processed size and percent are signaled.
+ */
+ testJob->setProcessedSize(3);
+
+ QCOMPARE(processed_spy.size(), 2);
+ QCOMPARE(processed_spy.at(1).at(0).value<KJob *>(), job);
+ QCOMPARE(processed_spy.at(1).at(2).value<qulonglong>(), qulonglong(3));
+ QCOMPARE(total_spy.size(), 1);
+ QCOMPARE(percent_spy.size(), 3);
+ QCOMPARE(percent_spy.at(2).at(0).value<KJob *>(), job);
+ QCOMPARE(percent_spy.at(2).at(1).value<unsigned long>(), static_cast<unsigned long>(30));
+
+ /* We set a new total size, but equals to the previous one.
+ * No signal is emitted.
+ */
+ testJob->setTotalSize(10);
+
+ QCOMPARE(processed_spy.size(), 2);
+ QCOMPARE(total_spy.size(), 1);
+ QCOMPARE(percent_spy.size(), 3);
+
+ /* We 'lost' the previous work done.
+ * Signals both percentage and new processed size.
+ */
+ testJob->setProcessedSize(0);
+
+ QCOMPARE(processed_spy.size(), 3);
+ QCOMPARE(processed_spy.at(2).at(0).value<KJob *>(), job);
+ QCOMPARE(processed_spy.at(2).at(2).value<qulonglong>(), qulonglong(0));
+ QCOMPARE(total_spy.size(), 1);
+ QCOMPARE(percent_spy.size(), 4);
+ QCOMPARE(percent_spy.at(3).at(0).value<KJob *>(), job);
+ QCOMPARE(percent_spy.at(3).at(1).value<unsigned long>(), static_cast<unsigned long>(0));
+
+ /* We process more than the total size!?
+ * Signals both percentage and new processed size.
+ * Percentage is 150%
+ *
+ * Might sounds weird, but verify that this case is handled gracefully.
+ */
+ testJob->setProcessedSize(15);
+
+ QCOMPARE(processed_spy.size(), 4);
+ QCOMPARE(processed_spy.at(3).at(0).value<KJob *>(), job);
+ QCOMPARE(processed_spy.at(3).at(2).value<qulonglong>(), qulonglong(15));
+ QCOMPARE(total_spy.size(), 1);
+ QCOMPARE(percent_spy.size(), 5);
+ QCOMPARE(percent_spy.at(4).at(0).value<KJob *>(), job);
+ QCOMPARE(percent_spy.at(4).at(1).value<unsigned long>(), static_cast<unsigned long>(150));
+
+ delete job;
+}
+
+void KJobTest::testExec_data()
+{
+ QTest::addColumn<int>("errorCode");
+ QTest::addColumn<QString>("errorText");
+
+ QTest::newRow("no error") << int(KJob::NoError) << QString();
+ QTest::newRow("error no text") << 2 << QString();
+ QTest::newRow("error with text") << 6 << "oops! an error? naaah, really?";
+}
+
+void KJobTest::testExec()
+{
+ TestJob *job = new TestJob;
+
+ QFETCH(int, errorCode);
+ QFETCH(QString, errorText);
+
+ job->setError(errorCode);
+ job->setErrorText(errorText);
+
+ int resultEmitted = 0;
+ // Prove to Kai Uwe that one can connect a job to a lambdas, despite the "private" signal
+ connect(job, &KJob::result, this, [&resultEmitted](KJob *) { ++resultEmitted; });
+
+ QSignalSpy destroyed_spy(job, SIGNAL(destroyed(QObject*)));
+
+ bool status = job->exec();
+
+ QCOMPARE(resultEmitted, 1);
+ QCOMPARE(status, (errorCode == KJob::NoError));
+ QCOMPARE(job->error(), errorCode);
+ QCOMPARE(job->errorText(), errorText);
+
+ // Verify that the job is not deleted immediately...
+ QCOMPARE(destroyed_spy.size(), 0);
+ QTimer::singleShot(0, &loop, SLOT(quit()));
+ // ... but when we enter the event loop again.
+ loop.exec();
+ QCOMPARE(destroyed_spy.size(), 1);
+}
+
+void KJobTest::testKill_data()
+{
+ QTest::addColumn<int>("killVerbosity");
+ QTest::addColumn<int>("errorCode");
+ QTest::addColumn<QString>("errorText");
+ QTest::addColumn<int>("resultEmitCount");
+ QTest::addColumn<int>("finishedEmitCount");
+
+ QTest::newRow("killed with result") << int(KJob::EmitResult)
+ << int(KJob::KilledJobError)
+ << QString()
+ << 1
+ << 1;
+ QTest::newRow("killed quietly") << int(KJob::Quietly)
+ << int(KJob::KilledJobError)
+ << QString()
+ << 0
+ << 1;
+}
+
+void KJobTest::testKill()
+{
+ TestJob *job = new TestJob;
+
+ connect(job, &KJob::result, this, &KJobTest::slotResult);
+ connect(job, &KJob::finished, this, &KJobTest::slotFinished);
+
+ m_lastError = KJob::NoError;
+ m_lastErrorText.clear();
+ m_resultCount = 0;
+ m_finishedCount = 0;
+
+ QFETCH(int, killVerbosity);
+ QFETCH(int, errorCode);
+ QFETCH(QString, errorText);
+ QFETCH(int, resultEmitCount);
+ QFETCH(int, finishedEmitCount);
+
+ QSignalSpy destroyed_spy(job, SIGNAL(destroyed(QObject*)));
+
+ job->kill(static_cast<KJob::KillVerbosity>(killVerbosity));
+ loop.processEvents(QEventLoop::AllEvents, 2000);
+
+ QCOMPARE(m_lastError, errorCode);
+ QCOMPARE(m_lastErrorText, errorText);
+
+ QCOMPARE(job->error(), errorCode);
+ QCOMPARE(job->errorText(), errorText);
+
+ QCOMPARE(m_resultCount, resultEmitCount);
+ QCOMPARE(m_finishedCount, finishedEmitCount);
+
+ // Verify that the job is not deleted immediately...
+ QCOMPARE(destroyed_spy.size(), 0);
+ QTimer::singleShot(0, &loop, SLOT(quit()));
+ // ... but when we enter the event loop again.
+ loop.exec();
+ QCOMPARE(destroyed_spy.size(), 1);
+}
+
+void KJobTest::testDelegateUsage()
+{
+ TestJob *job1 = new TestJob;
+ TestJob *job2 = new TestJob;
+ TestJobUiDelegate *delegate = new TestJobUiDelegate;
+ QPointer<TestJobUiDelegate> guard(delegate);
+
+ QVERIFY(job1->uiDelegate() == nullptr);
+ job1->setUiDelegate(delegate);
+ QVERIFY(job1->uiDelegate() == delegate);
+
+ QVERIFY(job2->uiDelegate() == nullptr);
+ job2->setUiDelegate(delegate);
+ QVERIFY(job2->uiDelegate() == nullptr);
+
+ delete job1;
+ delete job2;
+ QVERIFY(guard.isNull()); // deleted by job1
+}
+
+void KJobTest::testNestedExec()
+{
+ m_innerJob = nullptr;
+ QTimer::singleShot(100, this, SLOT(slotStartInnerJob()));
+ m_outerJob = new WaitJob();
+ m_outerJob->exec();
+}
+
+void KJobTest::slotStartInnerJob()
+{
+ QTimer::singleShot(100, this, SLOT(slotFinishOuterJob()));
+ m_innerJob = new WaitJob();
+ m_innerJob->exec();
+}
+
+void KJobTest::slotFinishOuterJob()
+{
+ QTimer::singleShot(100, this, SLOT(slotFinishInnerJob()));
+ m_outerJob->makeItFinish();
+}
+
+void KJobTest::slotFinishInnerJob()
+{
+ m_innerJob->makeItFinish();
+}
+
+void KJobTest::slotResult(KJob *job)
+{
+ if (job->error()) {
+ m_lastError = job->error();
+ m_lastErrorText = job->errorText();
+ } else {
+ m_lastError = KJob::NoError;
+ m_lastErrorText.clear();
+ }
+
+ m_resultCount++;
+ loop.quit();
+}
+
+void KJobTest::slotFinished(KJob *job)
+{
+ if (job->error()) {
+ m_lastError = job->error();
+ m_lastErrorText = job->errorText();
+ } else {
+ m_lastError = KJob::NoError;
+ m_lastErrorText.clear();
+ }
+
+ m_finishedCount++;
+}
+
+TestJob::TestJob() : KJob()
+{
+
+}
+
+TestJob::~TestJob()
+{
+
+}
+
+void TestJob::start()
+{
+ QTimer::singleShot(0, this, SLOT(doEmit()));
+}
+
+bool TestJob::doKill()
+{
+ return true;
+}
+
+void TestJob::setError(int errorCode)
+{
+ KJob::setError(errorCode);
+}
+
+void TestJob::setErrorText(const QString &errorText)
+{
+ KJob::setErrorText(errorText);
+}
+
+void TestJob::setProcessedSize(qulonglong size)
+{
+ KJob::setProcessedAmount(KJob::Bytes, size);
+}
+
+void TestJob::setTotalSize(qulonglong size)
+{
+ KJob::setTotalAmount(KJob::Bytes, size);
+}
+
+void TestJob::setPercent(unsigned long percentage)
+{
+ KJob::setPercent(percentage);
+}
+
+void TestJob::doEmit()
+{
+ emitResult();
+}
+
+void WaitJob::start()
+{
+}
+
+void WaitJob::makeItFinish()
+{
+ emitResult();
+}
+
+void TestJobUiDelegate::connectJob(KJob *job)
+{
+ QVERIFY(job->uiDelegate() != nullptr);
+}
+
+#include "moc_kjobtest.cpp"
--- /dev/null
+/* This file is part of the KDE project
+ Copyright (C) 2006 Kevin Ottens <ervin@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+
+*/
+
+#ifndef KJOBTEST_H
+#define KJOBTEST_H
+
+#include <QObject>
+#include <QEventLoop>
+#include "kjob.h"
+#include "kjobuidelegate.h"
+
+class TestJob : public KJob
+{
+ Q_OBJECT
+public:
+ TestJob();
+ ~TestJob() override;
+
+ void start() override;
+
+protected:
+ bool doKill() override;
+
+public:
+ void setError(int errorCode);
+ void setErrorText(const QString &errorText);
+ void setProcessedSize(qulonglong size);
+ void setTotalSize(qulonglong size);
+ void setPercent(unsigned long percentage);
+
+private Q_SLOTS:
+ void doEmit();
+};
+
+class TestJobUiDelegate : public KJobUiDelegate
+{
+ Q_OBJECT
+protected:
+ virtual void connectJob(KJob *job);
+};
+
+class WaitJob;
+
+class KJobTest : public QObject
+{
+ Q_OBJECT
+public:
+ KJobTest();
+
+public Q_SLOTS:
+
+ // These slots need to be public, otherwise qtestlib calls them as part of the test
+ void slotStartInnerJob();
+ void slotFinishOuterJob();
+ void slotFinishInnerJob();
+
+private Q_SLOTS:
+ void testEmitResult_data();
+ void testEmitResult();
+ void testProgressTracking();
+ void testExec_data();
+ void testExec();
+ void testKill_data();
+ void testKill();
+ void testDelegateUsage();
+ void testNestedExec();
+
+ void slotResult(KJob *job);
+ void slotFinished(KJob *job);
+
+private:
+ QEventLoop loop;
+ int m_lastError;
+ QString m_lastErrorText;
+ int m_resultCount;
+ int m_finishedCount;
+
+ WaitJob *m_outerJob;
+ WaitJob *m_innerJob;
+};
+
+class WaitJob : public KJob
+{
+ Q_OBJECT
+public:
+
+ void start() override;
+ void makeItFinish();
+};
+
+#endif
+
--- /dev/null
+/* This file is part of the KDE libraries
+ Copyright (c) 2003,2008 Oswald Buddenhagen <ossi@kde.org>
+ Copyright (c) 2005 Thomas Braxton <brax108@cox.net>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include <QTest>
+#include <kmacroexpander.h>
+
+#include <QHash>
+#include <QObject>
+
+class KMacroExpanderTest : public QObject
+{
+ Q_OBJECT
+
+private Q_SLOTS:
+ void expandMacros();
+ void expandMacrosShellQuote();
+ void expandMacrosShellQuoteParens();
+ void expandMacrosSubClass();
+};
+
+class MyCExpander : public KCharMacroExpander
+{
+ QString exp;
+public:
+ MyCExpander() : KCharMacroExpander(), exp("expanded") { }
+protected:
+ bool expandMacro(QChar ch, QStringList &ret)
+ {
+ if (ch == 'm') {
+ ret = QStringList(exp);
+ return true;
+ }
+ return false;
+ }
+};
+
+class MyWExpander : public KWordMacroExpander
+{
+ QString exp;
+public:
+ MyWExpander() : KWordMacroExpander(), exp("expanded") { }
+protected:
+ bool expandMacro(const QString &str, QStringList &ret)
+ {
+ if (str == QLatin1String("macro")) {
+ ret = QStringList(exp);
+ return true;
+ }
+ return false;
+ }
+};
+
+void
+KMacroExpanderTest::expandMacros()
+{
+ QHash<QChar, QStringList> map;
+ QStringList list;
+ QString s;
+
+ list << QString("Restaurant \"Chew It\"");
+ map.insert('n', list);
+ list.clear();
+ list << QString("element1") << QString("'element2'");
+ map.insert('l', list);
+
+ s = "%% text %l text %n";
+ QCOMPARE(KMacroExpander::expandMacros(s, map),
+ QLatin1String("% text element1 'element2' text Restaurant \"Chew It\""));
+ s = "text \"%l %n\" text";
+ QCOMPARE(KMacroExpander::expandMacros(s, map),
+ QLatin1String("text \"element1 'element2' Restaurant \"Chew It\"\" text"));
+
+ QHash<QChar, QString> map2;
+ map2.insert('a', "%n");
+ map2.insert('f', "filename.txt");
+ map2.insert('u', "https://www.kde.org/index.html");
+ map2.insert('n', "Restaurant \"Chew It\"");
+ s = "Title: %a - %f - %u - %n - %%";
+ QCOMPARE(KMacroExpander::expandMacros(s, map2),
+ QLatin1String("Title: %n - filename.txt - https://www.kde.org/index.html - Restaurant \"Chew It\" - %"));
+
+ QHash<QString, QString> smap;
+ smap.insert("foo", "%n");
+ smap.insert("file", "filename.txt");
+ smap.insert("url", "https://www.kde.org/index.html");
+ smap.insert("name", "Restaurant \"Chew It\"");
+
+ s = "Title: %foo - %file - %url - %name - %";
+ QCOMPARE(KMacroExpander::expandMacros(s, smap),
+ QLatin1String("Title: %n - filename.txt - https://www.kde.org/index.html - Restaurant \"Chew It\" - %"));
+ s = "%foo - %file - %url - %name";
+ QCOMPARE(KMacroExpander::expandMacros(s, smap),
+ QLatin1String("%n - filename.txt - https://www.kde.org/index.html - Restaurant \"Chew It\""));
+
+ s = "Title: %{foo} - %{file} - %{url} - %{name} - %";
+ QCOMPARE(KMacroExpander::expandMacros(s, smap),
+ QLatin1String("Title: %n - filename.txt - https://www.kde.org/index.html - Restaurant \"Chew It\" - %"));
+ s = "%{foo} - %{file} - %{url} - %{name}";
+ QCOMPARE(KMacroExpander::expandMacros(s, smap),
+ QLatin1String("%n - filename.txt - https://www.kde.org/index.html - Restaurant \"Chew It\""));
+
+ s = "Title: %foo-%file-%url-%name-%";
+ QCOMPARE(KMacroExpander::expandMacros(s, smap),
+ QLatin1String("Title: %n-filename.txt-https://www.kde.org/index.html-Restaurant \"Chew It\"-%"));
+
+ s = "Title: %{file} %{url";
+ QCOMPARE(KMacroExpander::expandMacros(s, smap),
+ QLatin1String("Title: filename.txt %{url"));
+
+ s = " * Copyright (C) 2008 %{AUTHOR}";
+ smap.clear();
+ QCOMPARE(KMacroExpander::expandMacros(s, smap),
+ QLatin1String(" * Copyright (C) 2008 %{AUTHOR}"));
+}
+
+void
+KMacroExpanderTest::expandMacrosShellQuote()
+{
+ QHash<QChar, QStringList> map;
+ QStringList list;
+ QString s;
+
+ list << QString("Restaurant \"Chew It\"");
+ map.insert('n', list);
+ list.clear();
+ list << QString("element1") << QString("'element2'") << QString("\"element3\"");
+ map.insert('l', list);
+
+#ifdef Q_OS_WIN
+ s = "text %l %n text";
+ QCOMPARE(KMacroExpander::expandMacrosShellQuote(s, map),
+ QLatin1String("text element1 'element2' \\^\"element3\\^\" \"Restaurant \"\\^\"\"Chew It\"\\^\" text"));
+
+ s = "text \"%l %n\" text";
+ QCOMPARE(KMacroExpander::expandMacrosShellQuote(s, map),
+ QLatin1String("text \"element1 'element2' \"\\^\"\"element3\"\\^\"\" Restaurant \"\\^\"\"Chew It\"\\^\"\"\" text"));
+#else
+ s = "text %l %n text";
+ QCOMPARE(KMacroExpander::expandMacrosShellQuote(s, map),
+ QLatin1String("text element1 ''\\''element2'\\''' '\"element3\"' 'Restaurant \"Chew It\"' text"));
+
+ s = "text \"%l %n\" text";
+ QCOMPARE(KMacroExpander::expandMacrosShellQuote(s, map),
+ QLatin1String("text \"element1 'element2' \\\"element3\\\" Restaurant \\\"Chew It\\\"\" text"));
+#endif
+
+ QHash<QChar, QString> map2;
+ map2.insert('a', "%n");
+ map2.insert('f', "filename.txt");
+ map2.insert('u', "https://www.kde.org/index.html");
+ map2.insert('n', "Restaurant \"Chew It\"");
+
+#ifdef Q_OS_WIN
+ s = "Title: %a - %f - %u - %n - %% - %VARIABLE% foo";
+ QCOMPARE(KMacroExpander::expandMacrosShellQuote(s, map2),
+ QLatin1String("Title: %PERCENT_SIGN%n - filename.txt - https://www.kde.org/index.html - \"Restaurant \"\\^\"\"Chew It\"\\^\" - %PERCENT_SIGN% - %VARIABLE% foo"));
+
+ s = "kedit --caption %n %f";
+ map2.insert('n', "Restaurant 'Chew It'");
+ QCOMPARE(KMacroExpander::expandMacrosShellQuote(s, map2),
+ QLatin1String("kedit --caption \"Restaurant 'Chew It'\" filename.txt"));
+
+ s = "kedit --caption \"%n\" %f";
+ QCOMPARE(KMacroExpander::expandMacrosShellQuote(s, map2),
+ QLatin1String("kedit --caption \"Restaurant 'Chew It'\" filename.txt"));
+
+ map2.insert('n', "Restaurant \"Chew It\"");
+ QCOMPARE(KMacroExpander::expandMacrosShellQuote(s, map2),
+ QLatin1String("kedit --caption \"Restaurant \"\\^\"\"Chew It\"\\^\"\"\" filename.txt"));
+
+ map2.insert('n', "Restaurant %HOME%");
+ QCOMPARE(KMacroExpander::expandMacrosShellQuote(s, map2),
+ QLatin1String("kedit --caption \"Restaurant %PERCENT_SIGN%HOME%PERCENT_SIGN%\" filename.txt"));
+
+ s = "kedit c:\\%f";
+ QCOMPARE(KMacroExpander::expandMacrosShellQuote(s, map2),
+ QLatin1String("kedit c:\\filename.txt"));
+
+ s = "kedit \"c:\\%f\"";
+ QCOMPARE(KMacroExpander::expandMacrosShellQuote(s, map2),
+ QLatin1String("kedit \"c:\\filename.txt\""));
+
+ map2.insert('f', "\"filename.txt\"");
+ QCOMPARE(KMacroExpander::expandMacrosShellQuote(s, map2),
+ QLatin1String("kedit \"c:\\\\\"\\^\"\"filename.txt\"\\^\"\"\""));
+
+ map2.insert('f', "path\\");
+ QCOMPARE(KMacroExpander::expandMacrosShellQuote(s, map2),
+ QLatin1String("kedit \"c:\\path\\\\\"\"\""));
+#else
+ s = "Title: %a - %f - %u - %n - %%";
+ QCOMPARE(KMacroExpander::expandMacrosShellQuote(s, map2),
+ QLatin1String("Title: %n - filename.txt - https://www.kde.org/index.html - 'Restaurant \"Chew It\"' - %"));
+
+ s = "kedit --caption %n %f";
+ map2.insert('n', "Restaurant 'Chew It'");
+ QCOMPARE(KMacroExpander::expandMacrosShellQuote(s, map2),
+ QLatin1String("kedit --caption 'Restaurant '\\''Chew It'\\''' filename.txt"));
+
+ s = "kedit --caption \"%n\" %f";
+ QCOMPARE(KMacroExpander::expandMacrosShellQuote(s, map2),
+ QLatin1String("kedit --caption \"Restaurant 'Chew It'\" filename.txt"));
+
+ map2.insert('n', "Restaurant \"Chew It\"");
+ QCOMPARE(KMacroExpander::expandMacrosShellQuote(s, map2),
+ QLatin1String("kedit --caption \"Restaurant \\\"Chew It\\\"\" filename.txt"));
+
+ map2.insert('n', "Restaurant $HOME");
+ QCOMPARE(KMacroExpander::expandMacrosShellQuote(s, map2),
+ QLatin1String("kedit --caption \"Restaurant \\$HOME\" filename.txt"));
+
+ map2.insert('n', "Restaurant `echo hello`");
+ QCOMPARE(KMacroExpander::expandMacrosShellQuote(s, map2),
+ QLatin1String("kedit --caption \"Restaurant \\`echo hello\\`\" filename.txt"));
+
+ s = "kedit --caption \"`echo %n`\" %f";
+ QCOMPARE(KMacroExpander::expandMacrosShellQuote(s, map2),
+ QLatin1String("kedit --caption \"$( echo 'Restaurant `echo hello`')\" filename.txt"));
+#endif
+}
+
+class DummyMacroExpander : public KMacroExpanderBase
+{
+public:
+ DummyMacroExpander() : KMacroExpanderBase(QChar(0x4567)) { }
+protected:
+ int expandPlainMacro(const QString &, int, QStringList &)
+ {
+ return 0;
+ }
+ int expandEscapedMacro(const QString &, int, QStringList &)
+ {
+ return 0;
+ }
+};
+
+void
+KMacroExpanderTest::expandMacrosShellQuoteParens()
+{
+ QHash<QChar, QStringList> map;
+ QStringList list;
+ QString s;
+
+ s = "( echo \"just testing (parens)\" ) ) after";
+ int pos = 0;
+ DummyMacroExpander kmx;
+ QVERIFY(kmx.expandMacrosShellQuote(s, pos));
+ QCOMPARE(s.mid(pos), QLatin1String(") after"));
+ QVERIFY(!kmx.expandMacrosShellQuote(s));
+
+}
+
+void
+KMacroExpanderTest::expandMacrosSubClass()
+{
+ QString s;
+
+ MyCExpander mx1;
+ s = "subst %m but not %n equ %%";
+ mx1.expandMacros(s);
+ QCOMPARE(s, QLatin1String("subst expanded but not %n equ %"));
+
+ MyWExpander mx2;
+ s = "subst %macro but not %not equ %%";
+ mx2.expandMacros(s);
+ QCOMPARE(s, QLatin1String("subst expanded but not %not equ %"));
+}
+
+QTEST_MAIN(KMacroExpanderTest)
+
+#include "kmacroexpandertest.moc"
--- /dev/null
+/*
+ * Copyright 2014 Alex Merry <alex.merry@kde.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) version 3, or any
+ * later version accepted by the membership of KDE e.V. (or its
+ * successor approved by the membership of KDE e.V.), which shall
+ * act as a proxy defined in Section 6 of version 3 of the license.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#include <QtTest>
+
+#include <kpluginloader.h>
+#include <kpluginfactory.h>
+
+class KPluginFactoryTest : public QObject
+{
+ Q_OBJECT
+
+private Q_SLOTS:
+ void testCreate()
+ {
+ KPluginLoader multiplugin(QStringLiteral("multiplugin"));
+ KPluginFactory *factory = multiplugin.factory();
+ QVERIFY(factory);
+ QVariantList args;
+ args << QStringLiteral("Some") << QStringLiteral("args") << 5;
+
+ QObject *obj = factory->create<QObject>(this, args);
+ QVERIFY(obj);
+ QCOMPARE(obj->objectName(), QString::fromLatin1("MultiPlugin1"));
+
+ QObject *obj2 = factory->create<QObject>(this, args);
+ QVERIFY(obj2);
+ QCOMPARE(obj2->objectName(), QString::fromLatin1("MultiPlugin1"));
+ QVERIFY(obj != obj2);
+ delete obj;
+ delete obj2;
+
+ obj = factory->create<QObject>(QStringLiteral("secondary"), this, args);
+ QVERIFY(obj);
+ QCOMPARE(obj->objectName(), QString::fromLatin1("MultiPlugin2"));
+
+ obj2 = factory->create<QObject>(QStringLiteral("secondary"), this, args);
+ QVERIFY(obj2);
+ QCOMPARE(obj2->objectName(), QString::fromLatin1("MultiPlugin2"));
+ QVERIFY(obj != obj2);
+ delete obj;
+ delete obj2;
+ }
+};
+
+QTEST_MAIN(KPluginFactoryTest)
+
+#include "kpluginfactorytest.moc"
+
--- /dev/null
+/*
+ * Copyright 2014 Alex Merry <alex.merry@kde.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) version 3, or any
+ * later version accepted by the membership of KDE e.V. (or its
+ * successor approved by the membership of KDE e.V.), which shall
+ * act as a proxy defined in Section 6 of version 3 of the license.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#include <QtTest>
+#include <QFileInfo>
+
+#include <kpluginloader.h>
+#include <kpluginmetadata.h>
+
+class LibraryPathRestorer {
+public:
+ explicit LibraryPathRestorer(const QStringList &paths) : mPaths(paths) {}
+ ~LibraryPathRestorer() { QCoreApplication::setLibraryPaths(mPaths); }
+private:
+ QStringList mPaths;
+};
+
+class KPluginLoaderTest : public QObject
+{
+ Q_OBJECT
+
+private Q_SLOTS:
+ void testFindPlugin_missing()
+ {
+ const QString location = KPluginLoader::findPlugin(QStringLiteral("idonotexist"));
+ QVERIFY2(location.isEmpty(), qPrintable(location));
+ }
+
+ void testFindPlugin()
+ {
+ const QString location = KPluginLoader::findPlugin(QStringLiteral("jsonplugin"));
+ QVERIFY2(!location.isEmpty(), qPrintable(location));
+ }
+
+ void testPluginVersion()
+ {
+ KPluginLoader vplugin(QStringLiteral("versionedplugin"));
+ QCOMPARE(vplugin.pluginVersion(), quint32(5));
+
+ KPluginLoader vplugin2(QStringLiteral("versionedplugin"));
+ QCOMPARE(vplugin2.pluginVersion(), quint32(5));
+
+ KPluginLoader uplugin(QStringLiteral("unversionedplugin"));
+ QCOMPARE(uplugin.pluginVersion(), quint32(-1));
+
+ KPluginLoader jplugin(KPluginName(QStringLiteral("jsonplugin")));
+ QCOMPARE(jplugin.pluginVersion(), quint32(-1));
+
+ KPluginLoader eplugin(KPluginName::fromErrorString(QStringLiteral("there was an error")));
+ QCOMPARE(eplugin.pluginVersion(), quint32(-1));
+
+ KPluginLoader noplugin(QStringLiteral("idonotexist"));
+ QCOMPARE(noplugin.pluginVersion(), quint32(-1));
+ }
+
+ void testPluginName()
+ {
+ KPluginLoader vplugin(QStringLiteral("versionedplugin"));
+ QCOMPARE(vplugin.pluginName(), QString::fromLatin1("versionedplugin"));
+
+ KPluginLoader jplugin(KPluginName(QStringLiteral("jsonplugin")));
+ QCOMPARE(jplugin.pluginName(), QString::fromLatin1("jsonplugin"));
+
+ KPluginLoader eplugin(KPluginName::fromErrorString(QStringLiteral("there was an error")));
+ QVERIFY2(eplugin.pluginName().isEmpty(), qPrintable(eplugin.pluginName()));
+
+ KPluginLoader noplugin(QStringLiteral("idonotexist"));
+ QCOMPARE(noplugin.pluginName(), QString::fromLatin1("idonotexist"));
+ }
+
+ void testFactory()
+ {
+ KPluginLoader vplugin(QStringLiteral("versionedplugin"));
+ QVERIFY(vplugin.factory());
+
+ KPluginLoader jplugin(KPluginName(QStringLiteral("jsonplugin")));
+ QVERIFY(jplugin.factory());
+
+ KPluginLoader eplugin(KPluginName::fromErrorString(QStringLiteral("there was an error")));
+ QVERIFY(!eplugin.factory());
+
+ KPluginLoader noplugin(QStringLiteral("idonotexist"));
+ QVERIFY(!noplugin.factory());
+ }
+
+ void testErrorString()
+ {
+ KPluginLoader eplugin(KPluginName::fromErrorString(QStringLiteral("there was an error")));
+ QCOMPARE(eplugin.errorString(), QString::fromLatin1("there was an error"));
+ }
+
+ void testFileName()
+ {
+ KPluginLoader vplugin(QStringLiteral("versionedplugin"));
+ QCOMPARE(QFileInfo(vplugin.fileName()).canonicalFilePath(),
+ QFileInfo(QStringLiteral(VERSIONEDPLUGIN_FILE)).canonicalFilePath());
+
+ KPluginLoader jplugin(KPluginName(QStringLiteral("jsonplugin")));
+ QCOMPARE(QFileInfo(jplugin.fileName()).canonicalFilePath(),
+ QFileInfo(QStringLiteral(JSONPLUGIN_FILE)).canonicalFilePath());
+
+ KPluginLoader eplugin(KPluginName::fromErrorString(QStringLiteral("there was an error")));
+ QVERIFY2(eplugin.fileName().isEmpty(), qPrintable(eplugin.fileName()));
+
+ KPluginLoader noplugin(QStringLiteral("idonotexist"));
+ QVERIFY2(noplugin.fileName().isEmpty(), qPrintable(noplugin.fileName()));
+ }
+
+ void testInstance()
+ {
+ KPluginLoader vplugin(QStringLiteral("versionedplugin"));
+ QVERIFY(vplugin.instance());
+
+ KPluginLoader jplugin(KPluginName(QStringLiteral("jsonplugin")));
+ QVERIFY(jplugin.instance());
+
+ KPluginLoader eplugin(KPluginName::fromErrorString(QStringLiteral("there was an error")));
+ QVERIFY(!eplugin.instance());
+
+ KPluginLoader noplugin(QStringLiteral("idonotexist"));
+ QVERIFY(!noplugin.instance());
+ }
+
+ void testIsLoaded()
+ {
+ KPluginLoader vplugin(QStringLiteral("versionedplugin"));
+ QVERIFY(!vplugin.isLoaded());
+ QVERIFY(vplugin.load());
+ QVERIFY(vplugin.isLoaded());
+
+ KPluginLoader jplugin(KPluginName(QStringLiteral("jsonplugin")));
+ QVERIFY(!jplugin.isLoaded());
+ QVERIFY(jplugin.load());
+ QVERIFY(jplugin.isLoaded());
+
+ KPluginLoader aplugin(QStringLiteral("alwaysunloadplugin"));
+ QVERIFY(!aplugin.isLoaded());
+ QVERIFY(aplugin.load());
+ QVERIFY(aplugin.isLoaded());
+ if (aplugin.unload()) {
+ QVERIFY(!aplugin.isLoaded());
+ } else {
+ qDebug() << "Could not unload alwaysunloadplugin:" << aplugin.errorString();
+ }
+
+ KPluginLoader eplugin(KPluginName::fromErrorString(QStringLiteral("there was an error")));
+ QVERIFY(!eplugin.isLoaded());
+ QVERIFY(!eplugin.load());
+ QVERIFY(!eplugin.isLoaded());
+
+ KPluginLoader noplugin(QStringLiteral("idonotexist"));
+ QVERIFY(!noplugin.isLoaded());
+ QVERIFY(!noplugin.load());
+ QVERIFY(!noplugin.isLoaded());
+ }
+
+ void testLoad()
+ {
+ KPluginLoader vplugin(QStringLiteral("versionedplugin"));
+ QVERIFY(vplugin.load());
+
+ KPluginLoader jplugin(KPluginName(QStringLiteral("jsonplugin")));
+ QVERIFY(jplugin.load());
+
+ KPluginLoader eplugin(KPluginName::fromErrorString(QStringLiteral("there was an error")));
+ QVERIFY(!eplugin.load());
+
+ KPluginLoader noplugin(QStringLiteral("idonotexist"));
+ QVERIFY(!noplugin.load());
+ }
+
+ void testLoadHints()
+ {
+ KPluginLoader aplugin(QStringLiteral("alwaysunloadplugin"));
+ aplugin.setLoadHints(QLibrary::ResolveAllSymbolsHint);
+ QCOMPARE(aplugin.loadHints(), QLibrary::ResolveAllSymbolsHint);
+ }
+
+ void testMetaData()
+ {
+ KPluginLoader aplugin(QStringLiteral("alwaysunloadplugin"));
+ QJsonObject ametadata = aplugin.metaData();
+ QVERIFY(!ametadata.isEmpty());
+ QVERIFY(ametadata.keys().contains(QStringLiteral("IID")));
+ QJsonValue ametadata_metadata = ametadata.value(QStringLiteral("MetaData"));
+ QVERIFY(ametadata_metadata.toObject().isEmpty());
+ QVERIFY(!aplugin.isLoaded()); // didn't load anything
+
+ KPluginLoader jplugin(KPluginName(QStringLiteral("jsonplugin")));
+ QJsonObject jmetadata = jplugin.metaData();
+ QVERIFY(!jmetadata.isEmpty());
+ QJsonValue jmetadata_metadata = jmetadata.value(QStringLiteral("MetaData"));
+ QVERIFY(jmetadata_metadata.isObject());
+ QJsonObject jmetadata_obj = jmetadata_metadata.toObject();
+ QVERIFY(!jmetadata_obj.isEmpty());
+ QJsonValue comment = jmetadata_obj.value(QStringLiteral("KPlugin")).toObject().value(QStringLiteral("Description"));
+ QVERIFY(comment.isString());
+ QCOMPARE(comment.toString(), QString::fromLatin1("This is a plugin"));
+
+ KPluginLoader eplugin(KPluginName::fromErrorString(QStringLiteral("there was an error")));
+ QVERIFY(eplugin.metaData().isEmpty());
+
+ KPluginLoader noplugin(QStringLiteral("idonotexist"));
+ QVERIFY(noplugin.metaData().isEmpty());
+ }
+
+ void testUnload()
+ {
+ KPluginLoader aplugin(QStringLiteral("alwaysunloadplugin"));
+ QVERIFY(aplugin.load());
+ // may need QEXPECT_FAIL on some platforms...
+ QVERIFY(aplugin.unload());
+ }
+
+ void testInstantiatePlugins()
+ {
+ const QString plugin1Path = KPluginLoader::findPlugin(QStringLiteral("jsonplugin"));
+ QVERIFY2(!plugin1Path.isEmpty(), qPrintable(plugin1Path));
+ const QString plugin2Path = KPluginLoader::findPlugin(QStringLiteral("unversionedplugin"));
+ QVERIFY2(!plugin2Path.isEmpty(), qPrintable(plugin2Path));
+ const QString plugin3Path = KPluginLoader::findPlugin(QStringLiteral("jsonplugin2"));
+ QVERIFY2(!plugin3Path.isEmpty(), qPrintable(plugin3Path));
+
+ QTemporaryDir temp;
+ QVERIFY(temp.isValid());
+ QDir dir(temp.path());
+ QVERIFY2(QFile::copy(plugin1Path, dir.absoluteFilePath(QFileInfo(plugin1Path).fileName())),
+ qPrintable(dir.absoluteFilePath(QFileInfo(plugin1Path).fileName())));
+ QVERIFY2(QFile::copy(plugin2Path, dir.absoluteFilePath(QFileInfo(plugin2Path).fileName())),
+ qPrintable(dir.absoluteFilePath(QFileInfo(plugin2Path).fileName())));
+ QVERIFY2(QFile::copy(plugin3Path, dir.absoluteFilePath(QFileInfo(plugin3Path).fileName())),
+ qPrintable(dir.absoluteFilePath(QFileInfo(plugin3Path).fileName())));
+
+ // only jsonplugin, since unversionedplugin has no json metadata
+ QList<QObject*> plugins = KPluginLoader::instantiatePlugins(temp.path());
+ QCOMPARE(plugins.size(), 2);
+ QStringList classNames = QStringList() << QString::fromLatin1(plugins[0]->metaObject()->className())
+ << QString::fromLatin1(plugins[1]->metaObject()->className());
+ classNames.sort();
+ QCOMPARE(classNames[0], QStringLiteral("jsonplugin2"));
+ QCOMPARE(classNames[1], QStringLiteral("jsonpluginfa"));
+ qDeleteAll(plugins);
+
+ //try filter
+ plugins = KPluginLoader::instantiatePlugins(temp.path(), [](const KPluginMetaData & md) {
+ return md.pluginId() == QStringLiteral("jsonplugin");
+ });
+ QCOMPARE(plugins.size(), 1);
+ QCOMPARE(plugins[0]->metaObject()->className(), "jsonpluginfa");
+ qDeleteAll(plugins);
+
+ plugins = KPluginLoader::instantiatePlugins(temp.path(), [](const KPluginMetaData & md) {
+ return md.pluginId() == QStringLiteral("unversionedplugin");
+ });
+ QCOMPARE(plugins.size(), 0);
+
+ plugins = KPluginLoader::instantiatePlugins(temp.path(), [](const KPluginMetaData & md) {
+ return md.pluginId() == QStringLiteral("foobar"); // ID does not match file name, is set in JSON
+ });
+ QCOMPARE(plugins.size(), 1);
+ QCOMPARE(plugins[0]->metaObject()->className(), "jsonplugin2");
+ qDeleteAll(plugins);
+
+ // check that parent gets set
+ plugins = KPluginLoader::instantiatePlugins(temp.path(), [](const KPluginMetaData&) { return true; }, this);
+ QCOMPARE(plugins.size(), 2);
+ QCOMPARE(plugins[0]->parent(), this);
+ QCOMPARE(plugins[1]->parent(), this);
+ qDeleteAll(plugins);
+
+ const QString subDirName = dir.dirName();
+ QVERIFY(dir.cdUp()); // should now point to /tmp on Linux
+ LibraryPathRestorer restorer(QCoreApplication::libraryPaths());
+ // instantiate using relative path
+ // make sure library path is set up correctly
+ QCoreApplication::setLibraryPaths(QStringList() << dir.absolutePath());
+ QVERIFY(!QDir::isAbsolutePath(subDirName));
+ plugins = KPluginLoader::instantiatePlugins(subDirName);
+ QCOMPARE(plugins.size(), 2);
+ classNames = QStringList() << QString::fromLatin1(plugins[0]->metaObject()->className())
+ << QString::fromLatin1(plugins[1]->metaObject()->className());
+ classNames.sort();
+ QCOMPARE(classNames[0], QStringLiteral("jsonplugin2"));
+ QCOMPARE(classNames[1], QStringLiteral("jsonpluginfa"));
+ qDeleteAll(plugins);
+ }
+
+ void testFindPlugins()
+ {
+ const QString plugin1Path = KPluginLoader::findPlugin(QStringLiteral("jsonplugin"));
+ QVERIFY2(!plugin1Path.isEmpty(), qPrintable(plugin1Path));
+ const QString plugin2Path = KPluginLoader::findPlugin(QStringLiteral("unversionedplugin"));
+ QVERIFY2(!plugin2Path.isEmpty(), qPrintable(plugin2Path));
+ const QString plugin3Path = KPluginLoader::findPlugin(QStringLiteral("jsonplugin2"));
+ QVERIFY2(!plugin3Path.isEmpty(), qPrintable(plugin3Path));
+
+ QTemporaryDir temp;
+ QVERIFY(temp.isValid());
+ QDir dir(temp.path());
+ QVERIFY(dir.mkdir(QStringLiteral("kpluginmetadatatest")));
+ QVERIFY(dir.cd(QStringLiteral("kpluginmetadatatest")));
+ QVERIFY2(QFile::copy(plugin1Path, dir.absoluteFilePath(QFileInfo(plugin1Path).fileName())),
+ qPrintable(dir.absoluteFilePath(QFileInfo(plugin1Path).fileName())));
+ QVERIFY2(QFile::copy(plugin2Path, dir.absoluteFilePath(QFileInfo(plugin2Path).fileName())),
+ qPrintable(dir.absoluteFilePath(QFileInfo(plugin2Path).fileName())));
+ QVERIFY2(QFile::copy(plugin3Path, dir.absoluteFilePath(QFileInfo(plugin3Path).fileName())),
+ qPrintable(dir.absoluteFilePath(QFileInfo(plugin3Path).fileName())));
+ LibraryPathRestorer restorer(QCoreApplication::libraryPaths());
+ // we only want plugins from our temporary dir
+ QCoreApplication::setLibraryPaths(QStringList() << temp.path());
+
+ auto sortPlugins = [](const KPluginMetaData &a, const KPluginMetaData &b) {
+ return a.pluginId() < b.pluginId();
+ };
+ // it should find jsonplugin and jsonplugin2 since unversionedplugin does not have any meta data
+ auto plugins = KPluginLoader::findPlugins(QStringLiteral("kpluginmetadatatest"));
+ std::sort(plugins.begin(), plugins.end(), sortPlugins);
+ QCOMPARE(plugins.size(), 2);
+ QCOMPARE(plugins[0].pluginId(), QStringLiteral("foobar")); // ID is not the filename, it is set in the JSON metadata
+ QCOMPARE(plugins[0].description(), QStringLiteral("This is another plugin"));
+ QCOMPARE(plugins[1].pluginId(), QStringLiteral("jsonplugin"));
+ QCOMPARE(plugins[1].description(), QStringLiteral("This is a plugin"));
+
+ // filter accepts none
+ plugins = KPluginLoader::findPlugins(QStringLiteral("kpluginmetadatatest"), [](const KPluginMetaData &) { return false; });
+ std::sort(plugins.begin(), plugins.end(), sortPlugins);
+ QCOMPARE(plugins.size(), 0);
+
+ // filter accepts all
+ plugins = KPluginLoader::findPlugins(QStringLiteral("kpluginmetadatatest"), [](const KPluginMetaData &) { return true; });
+ std::sort(plugins.begin(), plugins.end(), sortPlugins);
+ QCOMPARE(plugins.size(), 2);
+ QCOMPARE(plugins[0].description(), QStringLiteral("This is another plugin"));
+ QCOMPARE(plugins[1].description(), QStringLiteral("This is a plugin"));
+
+ // invalid std::function as filter
+ plugins = KPluginLoader::findPlugins(QStringLiteral("kpluginmetadatatest"));
+ std::sort(plugins.begin(), plugins.end(), sortPlugins);
+ QCOMPARE(plugins.size(), 2);
+ QCOMPARE(plugins[0].description(), QStringLiteral("This is another plugin"));
+ QCOMPARE(plugins[1].description(), QStringLiteral("This is a plugin"));
+
+ // by plugin id
+ plugins = KPluginLoader::findPluginsById(dir.absolutePath(), QStringLiteral("foobar"));
+ QCOMPARE(plugins.size(), 1);
+ QCOMPARE(plugins[0].description(), QStringLiteral("This is another plugin"));
+
+ // by plugin invalid id
+ plugins = KPluginLoader::findPluginsById(dir.absolutePath(), QStringLiteral("invalidid"));
+ QCOMPARE(plugins.size(), 0);
+
+ // absolute path, no filter
+ plugins = KPluginLoader::findPlugins(dir.absolutePath());
+ std::sort(plugins.begin(), plugins.end(), sortPlugins);
+ QCOMPARE(plugins.size(), 2);
+ QCOMPARE(plugins[0].description(), QStringLiteral("This is another plugin"));
+ QCOMPARE(plugins[1].description(), QStringLiteral("This is a plugin"));
+ }
+
+ void testForEachPlugin()
+ {
+ const QString jsonPluginSrc = KPluginLoader::findPlugin(QStringLiteral("jsonplugin"));
+ QVERIFY2(!jsonPluginSrc.isEmpty(), qPrintable(jsonPluginSrc));
+ const QString unversionedPluginSrc = KPluginLoader::findPlugin(QStringLiteral("unversionedplugin"));
+ QVERIFY2(!unversionedPluginSrc.isEmpty(), qPrintable(unversionedPluginSrc));
+ const QString jsonPlugin2Src = KPluginLoader::findPlugin(QStringLiteral("jsonplugin2"));
+ QVERIFY2(!jsonPlugin2Src.isEmpty(), qPrintable(jsonPlugin2Src));
+
+ QTemporaryDir temp;
+ QVERIFY(temp.isValid());
+ QDir dir(temp.path());
+ QVERIFY(dir.mkdir(QStringLiteral("for-each-plugin")));
+ QVERIFY(dir.cd(QStringLiteral("for-each-plugin")));
+ const QString jsonPluginDest = dir.absoluteFilePath(QFileInfo(jsonPluginSrc).fileName());
+ QVERIFY2(QFile::copy(jsonPluginSrc, jsonPluginDest), qPrintable(jsonPluginDest));
+ const QString unversionedPluginDest = dir.absoluteFilePath(QFileInfo(unversionedPluginSrc).fileName());
+ QVERIFY2(QFile::copy(unversionedPluginSrc, unversionedPluginDest), qPrintable(unversionedPluginDest));
+ // copy jsonplugin2 to a "for-each-plugin" subdirectory in a different directory
+ QTemporaryDir temp2;
+ QVERIFY(temp2.isValid());
+ QDir dir2(temp2.path());
+ QVERIFY(dir2.mkdir(QStringLiteral("for-each-plugin")));
+ QVERIFY(dir2.cd(QStringLiteral("for-each-plugin")));
+ const QString jsonPlugin2Dest = dir2.absoluteFilePath(QFileInfo(jsonPlugin2Src).fileName());
+ QVERIFY2(QFile::copy(jsonPlugin2Src, jsonPlugin2Dest), qPrintable(jsonPlugin2Dest));
+
+ QStringList foundPlugins;
+ QStringList expectedPlugins;
+ const auto addToFoundPlugins = [&](const QString &path) {
+ QVERIFY(!path.isEmpty());
+ foundPlugins.append(path);
+ };
+
+ // test finding with absolute path
+ expectedPlugins = QStringList() << jsonPluginDest << unversionedPluginDest;
+ expectedPlugins.sort();
+ KPluginLoader::forEachPlugin(dir.path(), addToFoundPlugins);
+ foundPlugins.sort();
+ QCOMPARE(foundPlugins, expectedPlugins);
+
+
+ expectedPlugins = QStringList() << jsonPlugin2Dest;
+ expectedPlugins.sort();
+ foundPlugins.clear();
+ KPluginLoader::forEachPlugin(dir2.path(), addToFoundPlugins);
+ foundPlugins.sort();
+ QCOMPARE(foundPlugins, expectedPlugins);
+
+ // now test relative paths
+
+ LibraryPathRestorer restorer(QCoreApplication::libraryPaths());
+ QCoreApplication::setLibraryPaths(QStringList() << temp.path());
+ expectedPlugins = QStringList() << jsonPluginDest << unversionedPluginDest;
+ expectedPlugins.sort();
+ foundPlugins.clear();
+ KPluginLoader::forEachPlugin(QStringLiteral("for-each-plugin"), addToFoundPlugins);
+ foundPlugins.sort();
+ QCOMPARE(foundPlugins, expectedPlugins);
+
+ QCoreApplication::setLibraryPaths(QStringList() << temp2.path());
+ expectedPlugins = QStringList() << jsonPlugin2Dest;
+ expectedPlugins.sort();
+ foundPlugins.clear();
+ KPluginLoader::forEachPlugin(QStringLiteral("for-each-plugin"), addToFoundPlugins);
+ foundPlugins.sort();
+ QCOMPARE(foundPlugins, expectedPlugins);
+
+ QCoreApplication::setLibraryPaths(QStringList() << temp.path() << temp2.path());
+ expectedPlugins = QStringList() << jsonPluginDest << unversionedPluginDest << jsonPlugin2Dest;
+ expectedPlugins.sort();
+ foundPlugins.clear();
+ KPluginLoader::forEachPlugin(QStringLiteral("for-each-plugin"), addToFoundPlugins);
+ foundPlugins.sort();
+ QCOMPARE(foundPlugins, expectedPlugins);
+ }
+};
+
+QTEST_MAIN(KPluginLoaderTest)
+
+#include "kpluginloadertest.moc"
--- /dev/null
+/*
+ * Copyright 2014 Alex Richardson <arichardson.kde@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) version 3, or any
+ * later version accepted by the membership of KDE e.V. (or its
+ * successor approved by the membership of KDE e.V.), which shall
+ * act as a proxy defined in Section 6 of version 3 of the license.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#include <QtTest>
+
+#include <kpluginmetadata.h>
+#include <kpluginloader.h>
+#include <kaboutdata.h>
+
+#include <QLocale>
+
+
+namespace QTest
+{
+template<> inline char *toString(const QJsonValue &val)
+{
+ // simply reuse the QDebug representation
+ QString result;
+ QDebug(&result) << val;
+ return QTest::toString(result);
+}
+}
+
+class KPluginMetaDataTest : public QObject
+{
+ Q_OBJECT
+
+private Q_SLOTS:
+ void testFromPluginLoader()
+ {
+ QString location = KPluginLoader::findPlugin(QStringLiteral("jsonplugin"));
+ QVERIFY2(!location.isEmpty(),"Could not find jsonplugin");
+
+ // now that this file is translated we need to read it instead of hardcoding the contents here
+ QString jsonLocation = QFINDTESTDATA("jsonplugin.json");
+ QVERIFY2(!jsonLocation.isEmpty(), "Could not find jsonplugin.json");
+ QFile jsonFile(jsonLocation);
+ QVERIFY(jsonFile.open(QFile::ReadOnly));
+ QJsonParseError e;
+ QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonFile.readAll(), &e);
+ QCOMPARE(e.error, QJsonParseError::NoError);
+
+ location = QFileInfo(location).absoluteFilePath();
+
+ KPluginMetaData fromQPluginLoader(QPluginLoader(QStringLiteral("jsonplugin")));
+ KPluginMetaData fromKPluginLoader(KPluginLoader(QStringLiteral("jsonplugin")));
+ KPluginMetaData fromFullPath(location);
+ KPluginMetaData fromRelativePath(QStringLiteral("jsonplugin"));
+ KPluginMetaData fromRawData(jsonDoc.object(), location);
+
+ auto description = QStringLiteral("This is a plugin");
+
+ QVERIFY(fromQPluginLoader.isValid());
+ QCOMPARE(fromQPluginLoader.description(), description);
+ QVERIFY(fromKPluginLoader.isValid());
+ QCOMPARE(fromKPluginLoader.description(), description);
+ QVERIFY(fromFullPath.isValid());
+ QCOMPARE(fromFullPath.description(), description);
+ QVERIFY(fromRelativePath.isValid());
+ QCOMPARE(fromRelativePath.description(), description);
+ QVERIFY(fromRawData.isValid());
+ QCOMPARE(fromRawData.description(), description);
+
+ // check operator==
+ QCOMPARE(fromRawData, fromRawData);
+ QCOMPARE(fromQPluginLoader, fromQPluginLoader);
+ QCOMPARE(fromKPluginLoader, fromKPluginLoader);
+ QCOMPARE(fromFullPath, fromFullPath);
+
+ QCOMPARE(fromQPluginLoader, fromKPluginLoader);
+ QCOMPARE(fromQPluginLoader, fromFullPath);
+ QCOMPARE(fromQPluginLoader, fromRawData);
+
+ QCOMPARE(fromKPluginLoader, fromQPluginLoader);
+ QCOMPARE(fromKPluginLoader, fromFullPath);
+ QCOMPARE(fromKPluginLoader, fromRawData);
+
+ QCOMPARE(fromFullPath, fromQPluginLoader);
+ QCOMPARE(fromFullPath, fromKPluginLoader);
+ QCOMPARE(fromFullPath, fromRawData);
+
+ QCOMPARE(fromRawData, fromQPluginLoader);
+ QCOMPARE(fromRawData, fromKPluginLoader);
+ QCOMPARE(fromRawData, fromFullPath);
+
+ }
+
+ void testAllKeys()
+ {
+ QJsonParseError e;
+ QJsonObject jo = QJsonDocument::fromJson("{\n"
+ " \"KPlugin\": {\n"
+ " \"Name\": \"Date and Time\",\n"
+ " \"Description\": \"Date and time by timezone\",\n"
+ " \"Icon\": \"preferences-system-time\",\n"
+ " \"Authors\": { \"Name\": \"Aaron Seigo\", \"Email\": \"aseigo@kde.org\" },\n"
+ " \"Translators\": { \"Name\": \"No One\", \"Email\": \"no.one@kde.org\" },\n"
+ " \"OtherContributors\": { \"Name\": \"No One\", \"Email\": \"no.one@kde.org\" },\n"
+ " \"Category\": \"Date and Time\",\n"
+ " \"Dependencies\": [ \"foo\", \"bar\"],\n"
+ " \"EnabledByDefault\": \"true\",\n"
+ " \"ExtraInformation\": \"Something else\",\n"
+ " \"License\": \"LGPL\",\n"
+ " \"Copyright\": \"(c) Alex Richardson 2015\",\n"
+ " \"Id\": \"time\",\n"
+ " \"Version\": \"1.0\",\n"
+ " \"Website\": \"https://plasma.kde.org/\",\n"
+ " \"MimeTypes\": [ \"image/png\" ],\n"
+ " \"ServiceTypes\": [\"Plasma/DataEngine\"]\n"
+ " }\n}\n", &e).object();
+ QCOMPARE(e.error, QJsonParseError::NoError);
+ KPluginMetaData m(jo, QString());
+ QVERIFY(m.isValid());
+ QCOMPARE(m.pluginId(), QStringLiteral("time"));
+ QCOMPARE(m.name(), QStringLiteral("Date and Time"));
+ QCOMPARE(m.description(), QStringLiteral("Date and time by timezone"));
+ QCOMPARE(m.extraInformation(), QStringLiteral("Something else"));
+ QCOMPARE(m.iconName(), QStringLiteral("preferences-system-time"));
+ QCOMPARE(m.category(), QStringLiteral("Date and Time"));
+ QCOMPARE(m.dependencies(), QStringList() << QStringLiteral("foo") << QStringLiteral("bar"));
+ QCOMPARE(m.authors().size(), 1);
+ QCOMPARE(m.authors()[0].name(), QStringLiteral("Aaron Seigo"));
+ QCOMPARE(m.authors()[0].emailAddress(), QStringLiteral("aseigo@kde.org"));
+ QCOMPARE(m.translators().size(), 1);
+ QCOMPARE(m.translators()[0].name(), QStringLiteral("No One"));
+ QCOMPARE(m.translators()[0].emailAddress(), QStringLiteral("no.one@kde.org"));
+ QCOMPARE(m.otherContributors().size(), 1);
+ QCOMPARE(m.otherContributors()[0].name(), QStringLiteral("No One"));
+ QCOMPARE(m.otherContributors()[0].emailAddress(), QStringLiteral("no.one@kde.org"));
+ QVERIFY(m.isEnabledByDefault());
+ QCOMPARE(m.license(), QStringLiteral("LGPL"));
+ QCOMPARE(m.copyrightText(), QStringLiteral("(c) Alex Richardson 2015"));
+ QCOMPARE(m.version(), QStringLiteral("1.0"));
+ QCOMPARE(m.website(), QStringLiteral("https://plasma.kde.org/"));
+ QCOMPARE(m.serviceTypes(), QStringList() << QStringLiteral("Plasma/DataEngine"));
+ QCOMPARE(m.mimeTypes(), QStringList() << QStringLiteral("image/png"));
+ }
+
+ void testTranslations()
+ {
+ QJsonParseError e;
+ QJsonObject jo = QJsonDocument::fromJson("{ \"KPlugin\": {\n"
+ "\"Name\": \"Name\",\n"
+ "\"Name[de]\": \"Name (de)\",\n"
+ "\"Name[de_DE]\": \"Name (de_DE)\",\n"
+ "\"Description\": \"Description\",\n"
+ "\"Description[de]\": \"Beschreibung (de)\",\n"
+ "\"Description[de_DE]\": \"Beschreibung (de_DE)\"\n"
+ "}\n}", &e).object();
+ KPluginMetaData m(jo, QString());
+ QLocale::setDefault(QLocale::c());
+ QCOMPARE(m.name(), QStringLiteral("Name"));
+ QCOMPARE(m.description(), QStringLiteral("Description"));
+
+ QLocale::setDefault(QLocale(QStringLiteral("de_DE")));
+ QCOMPARE(m.name(), QStringLiteral("Name (de_DE)"));
+ QCOMPARE(m.description(), QStringLiteral("Beschreibung (de_DE)"));
+
+ QLocale::setDefault(QLocale(QStringLiteral("de_CH")));
+ QCOMPARE(m.name(), QStringLiteral("Name (de)"));
+ QCOMPARE(m.description(), QStringLiteral("Beschreibung (de)"));
+
+ QLocale::setDefault(QLocale(QStringLiteral("fr_FR")));
+ QCOMPARE(m.name(), QStringLiteral("Name"));
+ QCOMPARE(m.description(), QStringLiteral("Description"));
+ }
+
+ void testReadStringList()
+ {
+ QJsonParseError e;
+ QJsonObject jo = QJsonDocument::fromJson("{\n"
+ "\"String\": \"foo\",\n"
+ "\"OneArrayEntry\": [ \"foo\" ],\n"
+ "\"Bool\": true,\n" // make sure booleans are accepted
+ "\"QuotedBool\": \"true\",\n" // make sure booleans are accepted
+ "\"Number\": 12345,\n" // number should also work
+ "\"QuotedNumber\": \"12345\",\n" // number should also work
+ "\"EmptyArray\": [],\n"
+ "\"NumberArray\": [1, 2, 3],\n"
+ "\"BoolArray\": [true, false, true],\n"
+ "\"StringArray\": [\"foo\", \"bar\"],\n"
+ "\"Null\": null,\n" // should return empty list
+ "\"QuotedNull\": \"null\",\n" // this is okay, it is a string
+ "\"ArrayWithNull\": [ \"foo\", null, \"bar\"],\n" // TODO: null is converted to empty string, is this okay?
+ "\"Object\": { \"foo\": \"bar\" }\n" // should return empty list
+ "}", &e).object();
+ QCOMPARE(e.error, QJsonParseError::NoError);
+ QTest::ignoreMessage(QtWarningMsg, "Expected JSON property \"String\" to be a string list. Treating it as a list with a single entry: \"foo\" ");
+ QCOMPARE(KPluginMetaData::readStringList(jo, QStringLiteral("String")), QStringList(QStringLiteral("foo")));;
+ QCOMPARE(KPluginMetaData::readStringList(jo, QStringLiteral("OneArrayEntry")), QStringList(QStringLiteral("foo")));
+ QTest::ignoreMessage(QtWarningMsg, "Expected JSON property \"Bool\" to be a string list. Treating it as a list with a single entry: \"true\" ");
+ QCOMPARE(KPluginMetaData::readStringList(jo, QStringLiteral("Bool")), QStringList(QStringLiteral("true")));
+ QTest::ignoreMessage(QtWarningMsg, "Expected JSON property \"QuotedBool\" to be a string list. Treating it as a list with a single entry: \"true\" ");
+ QCOMPARE(KPluginMetaData::readStringList(jo, QStringLiteral("QuotedBool")), QStringList(QStringLiteral("true")));
+ QTest::ignoreMessage(QtWarningMsg, "Expected JSON property \"Number\" to be a string list. Treating it as a list with a single entry: \"12345\" ");
+ QCOMPARE(KPluginMetaData::readStringList(jo, QStringLiteral("Number")), QStringList(QStringLiteral("12345")));
+ QTest::ignoreMessage(QtWarningMsg, "Expected JSON property \"QuotedNumber\" to be a string list. Treating it as a list with a single entry: \"12345\" ");
+ QCOMPARE(KPluginMetaData::readStringList(jo, QStringLiteral("QuotedNumber")), QStringList(QStringLiteral("12345")));
+ QCOMPARE(KPluginMetaData::readStringList(jo, QStringLiteral("EmptyArray")), QStringList());
+ QCOMPARE(KPluginMetaData::readStringList(jo, QStringLiteral("NumberArray")), QStringList() << QStringLiteral("1") << QStringLiteral("2") << QStringLiteral("3"));
+ QCOMPARE(KPluginMetaData::readStringList(jo, QStringLiteral("BoolArray")), QStringList() << QStringLiteral("true") << QStringLiteral("false") << QStringLiteral("true"));
+ QCOMPARE(KPluginMetaData::readStringList(jo, QStringLiteral("StringArray")), QStringList() << QStringLiteral("foo") << QStringLiteral("bar"));
+ QCOMPARE(KPluginMetaData::readStringList(jo, QStringLiteral("Null")), QStringList());
+ QTest::ignoreMessage(QtWarningMsg, "Expected JSON property \"QuotedNull\" to be a string list. Treating it as a list with a single entry: \"null\" ");
+ QCOMPARE(KPluginMetaData::readStringList(jo, QStringLiteral("QuotedNull")), QStringList(QStringLiteral("null")));
+ QCOMPARE(KPluginMetaData::readStringList(jo, QStringLiteral("ArrayWithNull")), QStringList() << QStringLiteral("foo") << QStringLiteral("") << QStringLiteral("bar"));
+ QCOMPARE(KPluginMetaData::readStringList(jo, QStringLiteral("Object")), QStringList());
+ }
+
+ void testFromDesktopFile()
+ {
+ const QString dfile = QFINDTESTDATA("data/fakeplugin.desktop");
+ KPluginMetaData md(dfile);
+ QVERIFY(md.isValid());
+ QCOMPARE(md.pluginId(), QStringLiteral("fakeplugin"));
+ QCOMPARE(md.fileName(), QStringLiteral("fakeplugin"));
+ QCOMPARE(md.metaDataFileName(), dfile);
+ QCOMPARE(md.iconName(), QStringLiteral("preferences-system-time"));
+ QCOMPARE(md.license(), QStringLiteral("LGPL"));
+ QCOMPARE(md.website(), QStringLiteral("https://kde.org/"));
+ QCOMPARE(md.category(), QStringLiteral("Examples"));
+ QCOMPARE(md.version(), QStringLiteral("1.0"));
+ QCOMPARE(md.dependencies(), QStringList());
+ QCOMPARE(md.isHidden(), false);
+ QCOMPARE(md.serviceTypes(), QStringList(QStringLiteral("KService/NSA")));
+ QCOMPARE(md.mimeTypes(), QStringList() << QStringLiteral("image/png") << QStringLiteral("application/pdf"));
+
+ auto kp = md.rawData()[QStringLiteral("KPlugin")].toObject();
+ QStringList formFactors = KPluginMetaData::readStringList(kp, QStringLiteral("FormFactors"));
+ QCOMPARE(formFactors, QStringList() << QStringLiteral("mediacenter") << QStringLiteral("desktop"));
+ QCOMPARE(md.formFactors(), QStringList() << QStringLiteral("mediacenter") << QStringLiteral("desktop"));
+
+ const QString dfilehidden = QFINDTESTDATA("data/hiddenplugin.desktop");
+ KPluginMetaData mdhidden(dfilehidden);
+ QVERIFY(mdhidden.isValid());
+ QCOMPARE(mdhidden.isHidden(), true);
+ }
+
+ void twoStepsParseTest()
+ {
+ QStandardPaths::setTestModeEnabled(true);
+ const QString dfile = QFINDTESTDATA("data/twostepsparsetest.desktop");
+ const QString typesPath = QFINDTESTDATA("data/servicetypes/example-servicetype.desktop");
+ KPluginMetaData md = KPluginMetaData::fromDesktopFile(dfile, QStringList() << typesPath);
+ QVERIFY(md.isValid());
+ QStringList list = KPluginMetaData::readStringList(md.rawData(), QStringLiteral("X-Test-List"));
+ QCOMPARE(list, QStringList({QStringLiteral("first"), QStringLiteral("second")}));
+ }
+
+ void testServiceTypes_data()
+ {
+ const QString kdevServiceTypePath = QFINDTESTDATA("data/servicetypes/fake-kdevelopplugin.desktop");
+ const QString invalidServiceTypePath = QFINDTESTDATA("data/servicetypes/invalid-servicetype.desktop");
+ const QString exampleServiceTypePath = QFINDTESTDATA("data/servicetypes/example-servicetype.desktop");
+ QVERIFY(!kdevServiceTypePath.isEmpty());
+ QVERIFY(!invalidServiceTypePath.isEmpty());
+ QVERIFY(!exampleServiceTypePath.isEmpty());
+ }
+
+ void testServiceType()
+ {
+ const QString typesPath = QFINDTESTDATA("data/servicetypes/example-servicetype.desktop");
+ QVERIFY(!typesPath.isEmpty());
+ const QString inputPath = QFINDTESTDATA("data/servicetypes/example-input.desktop");
+ QVERIFY(!inputPath.isEmpty());
+ KPluginMetaData md = KPluginMetaData::fromDesktopFile(inputPath, QStringList() << typesPath);
+ QVERIFY(md.isValid());
+ QCOMPARE(md.name(), QStringLiteral("Example"));
+ QCOMPARE(md.serviceTypes(), QStringList() << QStringLiteral("foo/bar") << QStringLiteral("bar/foo"));
+ // qDebug().noquote() << QJsonDocument(md.rawData()).toJson();
+ QCOMPARE(md.rawData().size(), 8);
+ QVERIFY(md.rawData().value(QStringLiteral("KPlugin")).isObject());
+ QCOMPARE(md.rawData().value(QStringLiteral("X-Test-Integer")), QJsonValue(42));
+ QCOMPARE(md.rawData().value(QStringLiteral("X-Test-Bool")), QJsonValue(true));
+ QCOMPARE(md.rawData().value(QStringLiteral("X-Test-Double")), QJsonValue(42.42));
+ QCOMPARE(md.rawData().value(QStringLiteral("X-Test-String")), QJsonValue(QStringLiteral("foobar")));
+ QCOMPARE(md.rawData().value(QStringLiteral("X-Test-List")), QJsonValue(QJsonArray::fromStringList(QStringList() << QStringLiteral("a") << QStringLiteral("b") << QStringLiteral("c") << QStringLiteral("def"))));
+ QCOMPARE(md.rawData().value(QStringLiteral("X-Test-Size")), QJsonValue(QStringLiteral("10,20"))); // QSize no longer supported (and also no longer used)
+ QCOMPARE(md.rawData().value(QStringLiteral("X-Test-Unknown")), QJsonValue(QStringLiteral("true"))); // unknown property -> string
+
+ }
+
+ void testBadGroupsInServiceType()
+ {
+ const QString typesPath = QFINDTESTDATA("data/servicetypes/bad-groups-servicetype.desktop");
+ QVERIFY(!typesPath.isEmpty());
+ const QString inputPath = QFINDTESTDATA("data/servicetypes/bad-groups-input.desktop");
+ QVERIFY(!inputPath.isEmpty());
+ QTest::ignoreMessage(QtWarningMsg, "Illegal .desktop group definition (does not end with ']'): \"[PropertyDef::MissingTerminator\"");
+ QTest::ignoreMessage(QtWarningMsg, "Illegal .desktop group definition (does not end with ']'): \"[PropertyDef::\"");
+ QTest::ignoreMessage(QtWarningMsg, "Illegal .desktop group definition (does not end with ']'): \"[\"");
+ QTest::ignoreMessage(QtWarningMsg, "Read empty .desktop file group name! Invalid file?");
+ QTest::ignoreMessage(QtWarningMsg, QRegularExpression(QStringLiteral("Skipping invalid group \"\" in service type \".*/bad-groups-servicetype.desktop\"")));
+ QTest::ignoreMessage(QtWarningMsg, QRegularExpression(QStringLiteral("Skipping invalid group \"DoesNotStartWithPropertyDef::SomeOtherProperty\" in service type \".+/data/servicetypes/bad-groups-servicetype.desktop\"")));
+ QTest::ignoreMessage(QtWarningMsg, "Could not find Type= key in group \"PropertyDef::MissingType\"");
+ QTest::ignoreMessage(QtWarningMsg, QRegularExpression(QStringLiteral("Property type \"integer\" is not a known QVariant type. Found while parsing property definition for \"InvalidType\" in \".+/data/servicetypes/bad-groups-servicetype.desktop\"")));
+ QTest::ignoreMessage(QtWarningMsg, QRegularExpression(QStringLiteral(".+/data/servicetypes/bad-groups-input.desktop:\\d+: Key name is missing: \"=11\"")));
+ QTest::ignoreMessage(QtWarningMsg, QRegularExpression(QStringLiteral(".+/data/servicetypes/bad-groups-input.desktop:\\d+: Key name is missing: \"=13\"")));
+ QTest::ignoreMessage(QtWarningMsg, QRegularExpression(QStringLiteral(".+/data/servicetypes/bad-groups-input.desktop:\\d+: Key name is missing: \"=14\"")));
+ KPluginMetaData md = KPluginMetaData::fromDesktopFile(inputPath, QStringList() << typesPath);
+ QVERIFY(md.isValid());
+ QCOMPARE(md.name(), QStringLiteral("Bad Groups"));
+ // qDebug().noquote() << QJsonDocument(md.rawData()).toJson();
+ QCOMPARE(md.rawData().size(), 8);
+ QCOMPARE(md.rawData().value(QStringLiteral("ThisIsOkay")), QJsonValue(10)); // integer
+ // 11 is empty group
+ QCOMPARE(md.rawData().value(QStringLiteral("MissingTerminator")), QJsonValue(12)); // accept missing group terminator (for now) -> integer
+ // 13 is empty group name
+ // 14 is empty group name
+ QCOMPARE(md.rawData().value(QStringLiteral("SomeOtherProperty")), QJsonValue(QStringLiteral("15"))); // does not start with PropertyDef:: -> fall back to string
+ QCOMPARE(md.rawData().value(QStringLiteral("TrailingSpacesAreOkay")), QJsonValue(16)); // accept trailing spaces in group name -> integer
+ QCOMPARE(md.rawData().value(QStringLiteral("MissingType")), QJsonValue(QStringLiteral("17"))); // Type= missing -> fall back to string
+ QCOMPARE(md.rawData().value(QStringLiteral("InvalidType")), QJsonValue(QStringLiteral("18"))); // Type= is invalid -> fall back to string
+ QCOMPARE(md.rawData().value(QStringLiteral("ThisIsOkayAgain")), QJsonValue(19)); // valid definition after invalid ones should still work -> integer
+ }
+
+ void testJSONMetadata()
+ {
+ const QString inputPath = QFINDTESTDATA("data/testmetadata.json");
+ KPluginMetaData md(inputPath);
+ QVERIFY(md.isValid());
+ QCOMPARE(md.name(), QStringLiteral("Test"));
+
+ QCOMPARE(md.value(QStringLiteral("X-Plasma-MainScript")), QStringLiteral("ui/main.qml"));
+ QJsonArray expected;
+ expected.append(QStringLiteral("Export"));
+ QCOMPARE(md.rawData().value(QStringLiteral("X-Purpose-PluginTypes")).toArray(), expected);
+ }
+};
+
+QTEST_MAIN(KPluginMetaDataTest)
+
+#include "kpluginmetadatatest.moc"
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ Copyright (C) 2007 Oswald Buddenhagen <ossi@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include <kprocess.h>
+#include <QtTest>
+#include <qstandardpaths.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <signal.h>
+
+class KProcessTest : public QObject
+{
+ Q_OBJECT
+
+private Q_SLOTS:
+ void test_channels();
+ void test_setShellCommand();
+};
+
+// IOCCC nomination pending
+
+static char **gargv;
+
+static QString recurse(KProcess::OutputChannelMode how)
+{
+ QProcess p;
+ p.setProcessChannelMode(QProcess::MergedChannels);
+ p.start(QString::fromLatin1(gargv[0]), QStringList() << QString::number(how) << QStringLiteral("--nocrashhandler"));
+ p.waitForFinished();
+ return QString::fromLatin1(p.readAllStandardOutput());
+}
+
+#define EOUT "foo - stdout"
+#define EERR "bar - stderr"
+#define POUT "program output:\n"
+#define ROUT "received stdout:\n"
+#define RERR "received stderr:\n"
+
+#define EO EOUT "\n"
+#define EE EERR "\n"
+#define TESTCHAN(me,ms,pout,rout,rerr) \
+ e = QStringLiteral("mode: " ms "\n" POUT pout ROUT rout RERR rerr); \
+ a = QStringLiteral("mode: " ms "\n") + recurse(KProcess::me); \
+ QCOMPARE(a, e)
+
+void KProcessTest::test_channels()
+{
+#ifdef Q_OS_UNIX
+ QString e, a;
+ TESTCHAN(SeparateChannels, "separate", "", EO, EE);
+ TESTCHAN(ForwardedChannels, "forwarded", EO EE, "", "");
+ TESTCHAN(OnlyStderrChannel, "forwarded stdout", EO, "", EE);
+ TESTCHAN(OnlyStdoutChannel, "forwarded stderr", EE, EO, "");
+ TESTCHAN(MergedChannels, "merged", "", EO EE, "");
+#else
+ Q_UNUSED(recurse);
+ QSKIP("This test needs a UNIX system");
+#endif
+}
+
+void KProcessTest::test_setShellCommand()
+{
+ // Condition copied from kprocess.cpp
+#if !defined(__linux__) && !defined(__FreeBSD__) && !defined(__NetBSD__) && !defined(__OpenBSD__) && !defined(__DragonFly__) && !defined(__GNU__)
+ QSKIP("This test needs a free UNIX system");
+#else
+ KProcess p;
+
+ p.setShellCommand(QStringLiteral("cat"));
+ QCOMPARE(p.program().count(), 1);
+ QCOMPARE(p.program().at(0), QStandardPaths::findExecutable(QStringLiteral("cat")));
+ QVERIFY(p.program().at(0).endsWith(QStringLiteral("/bin/cat")));
+ p.setShellCommand(QStringLiteral("true || false"));
+ QCOMPARE(p.program(), QStringList() << QStringLiteral("/bin/sh") << QStringLiteral("-c")
+ << QString::fromLatin1("true || false"));
+#endif
+}
+
+static void recursor(char **argv)
+{
+ if (argv[1]) {
+ KProcess p;
+ p.setShellCommand(QString::fromLatin1("echo " EOUT "; echo " EERR " >&2"));
+ p.setOutputChannelMode(static_cast<KProcess::OutputChannelMode>(atoi(argv[1])));
+ fputs(POUT, stdout);
+ fflush(stdout);
+ p.execute();
+ fputs(ROUT, stdout);
+ fputs(p.readAllStandardOutput().constData(), stdout);
+ fputs(RERR, stdout);
+ fputs(p.readAllStandardError().constData(), stdout);
+ exit(0);
+ }
+ gargv = argv;
+}
+
+QTEST_MAIN(recursor(argv); KProcessTest)
+
+#include "kprocesstest.moc"
--- /dev/null
+/* This file is part of the KDE libraries
+ Copyright (c) 2016 Michael Pyne <mpyne@kde.org>
+ Copyright (c) 2016 Arne Spiegelhauer <gm2.asp@gmail.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include <krandom.h>
+#include <krandomsequence.h>
+#include <stdlib.h>
+
+#include <QtTest>
+
+#include <QObject>
+#include <QString>
+#include <QRegExp>
+#include <QVarLengthArray>
+#include <QTextStream>
+#include <QProcess>
+
+#include <iostream>
+#include <algorithm>
+
+typedef QVarLengthArray<int> intSequenceType;
+
+static const char *binpath;
+
+static bool seqsAreEqual(const intSequenceType &l, const intSequenceType &r)
+{
+ if(l.size() != r.size()) {
+ return false;
+ }
+ const intSequenceType::const_iterator last(l.end());
+
+ intSequenceType::const_iterator l_first(l.begin());
+ intSequenceType::const_iterator r_first(r.begin());
+
+ while(l_first != last && *l_first == *r_first) {
+ l_first++; r_first++;
+ }
+
+ return l_first == last;
+}
+
+// Fills seq with random bytes produced by a new process. Seq should already
+// be sized to the needed amount of random numbers.
+static bool getChildRandSeq(intSequenceType &seq)
+{
+ QProcess subtestProcess;
+
+ // Launch a separate process to generate random numbers to test first-time
+ // seeding.
+ subtestProcess.start(QLatin1String(binpath), QStringList() << QString::number(seq.count()));
+ subtestProcess.waitForFinished();
+
+ QTextStream childStream(subtestProcess.readAllStandardOutput());
+
+ std::generate(seq.begin(), seq.end(), [&]() {
+ int temp; childStream >> temp; return temp;
+ });
+
+ char c;
+ childStream >> c;
+ return c == '\n' && childStream.status() == QTextStream::Ok;
+}
+
+class KRandomTest : public QObject
+{
+ Q_OBJECT
+
+private Q_SLOTS:
+ void test_random();
+ void test_randomString();
+ void test_randomStringThreaded();
+ void test_KRS();
+};
+
+void KRandomTest::test_random()
+{
+ int testValue = KRandom::random();
+
+ QVERIFY(testValue >= 0);
+ QVERIFY(testValue < RAND_MAX);
+
+ // Verify seeding results in different numbers across different procs
+ // See bug 362161
+ intSequenceType out1(10), out2(10);
+
+ QVERIFY(getChildRandSeq(out1));
+ QVERIFY(getChildRandSeq(out2));
+
+ QVERIFY(!seqsAreEqual(out1, out2));
+}
+
+void KRandomTest::test_randomString()
+{
+ const int desiredLength = 12;
+ const QRegExp outputFormat(QStringLiteral("[A-Za-z0-9]+"));
+ QString testString = KRandom::randomString(desiredLength);
+
+ QCOMPARE(testString.length(), desiredLength);
+ QVERIFY(outputFormat.exactMatch(testString));
+}
+
+void KRandomTest::test_KRS()
+{
+ using std::generate;
+ using std::all_of;
+
+ const int maxInt = 50000;
+ KRandomSequence krs1, krs2;
+ intSequenceType out1(10), out2(10);
+
+ generate(out1.begin(), out1.end(), [&]() { return krs1.getInt(maxInt); });
+ generate(out2.begin(), out2.end(), [&]() { return krs2.getInt(maxInt); });
+ QVERIFY(!seqsAreEqual(out1, out2));
+ QVERIFY(all_of(out1.begin(), out1.end(), [&](int x) { return x < maxInt; }));
+ QVERIFY(all_of(out2.begin(), out2.end(), [&](int x) { return x < maxInt; }));
+
+ // Compare same-seed
+ krs1.setSeed(5000);
+ krs2.setSeed(5000);
+
+ generate(out1.begin(), out1.end(), [&]() { return krs1.getInt(maxInt); });
+ generate(out2.begin(), out2.end(), [&]() { return krs2.getInt(maxInt); });
+ QVERIFY(seqsAreEqual(out1, out2));
+ QVERIFY(all_of(out1.begin(), out1.end(), [&](int x) { return x < maxInt; }));
+ QVERIFY(all_of(out2.begin(), out2.end(), [&](int x) { return x < maxInt; }));
+
+ // Compare same-seed and assignment ctor
+
+ krs1 = KRandomSequence(8000);
+ krs2 = KRandomSequence(8000);
+
+ generate(out1.begin(), out1.end(), [&]() { return krs1.getInt(maxInt); });
+ generate(out2.begin(), out2.end(), [&]() { return krs2.getInt(maxInt); });
+ QVERIFY(seqsAreEqual(out1, out2));
+ QVERIFY(all_of(out1.begin(), out1.end(), [&](int x) { return x < maxInt; }));
+ QVERIFY(all_of(out2.begin(), out2.end(), [&](int x) { return x < maxInt; }));
+}
+
+class KRandomTestThread : public QThread
+{
+protected:
+ void run() override
+ {
+ result = KRandom::randomString(32);
+ };
+public:
+ QString result;
+};
+
+void KRandomTest::test_randomStringThreaded()
+{
+ static const int size = 5;
+ KRandomTestThread* threads[size];
+ for (int i=0; i < size; ++i) {
+ threads[i] = new KRandomTestThread();
+ threads[i]->start();
+ }
+ QSet<QString> results;
+ for (int i=0; i < size; ++i) {
+ threads[i]->wait(2000);
+ results.insert(threads[i]->result);
+ }
+ // each thread should have returned a unique result
+ QCOMPARE(results.size(), size);
+ for (int i=0; i < size; ++i) {
+ delete threads[i];
+ }
+}
+
+// Used by getChildRandSeq... outputs random numbers to stdout and then
+// exits the process.
+static void childGenRandom(int count)
+{
+ // No logic to 300, just wanted to avoid it accidentally being 2.4B...
+ if (count <= 0 || count > 300) {
+ exit(-1);
+ }
+
+ while (--count > 0) {
+ std::cout << KRandom::random() << ' ';
+ }
+
+ std::cout << KRandom::random() << '\n';
+ exit(0);
+}
+
+// Manually implemented to dispatch to child process if needed to support
+// subtests
+int main(int argc, char *argv[])
+{
+ if (argc > 1) {
+ childGenRandom(std::atoi(argv[1]));
+ Q_UNREACHABLE();
+ }
+
+ binpath = argv[0];
+ KRandomTest randomTest;
+ return QTest::qExec(&randomTest);
+}
+
+#include "krandomtest.moc"
--- /dev/null
+/* This file is part of the KDE libraries
+ * Copyright (c) 2012 David Faure <faure@kde.org>
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2 of the License or ( at
+ * your option ) version 3 or, at the discretion of KDE e.V. ( which shall
+ * act as a proxy as in section 14 of the GPLv3 ), any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#include <kshareddatacache.h>
+
+#include <QtTest>
+
+#include <QObject>
+#include <QString>
+#include <QStringList>
+#include <QDir>
+#include <qstandardpaths.h>
+#include <string.h> // strcpy
+
+class KSharedDataCacheTest : public QObject
+{
+ Q_OBJECT
+
+private Q_SLOTS:
+ void initTestCase();
+ void simpleInsert();
+};
+
+void KSharedDataCacheTest::initTestCase()
+{
+}
+
+void KSharedDataCacheTest::simpleInsert()
+{
+ const QLatin1String cacheName("myTestCache");
+ const QLatin1String key("mypic");
+ // clear the cache
+ QString cacheFile = QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation) + QLatin1String("/") + cacheName + QLatin1String(".kcache");
+ QFile file(cacheFile);
+ if (file.exists()) {
+ QVERIFY(file.remove());
+ }
+ // insert something into it
+ KSharedDataCache cache(cacheName, 5 * 1024 * 1024);
+#ifndef Q_OS_WIN // the windows implementation is currently only memory based and not really shared
+ QVERIFY(file.exists()); // make sure we got the cache filename right
+#endif
+ QByteArray data;
+ data.resize(9228);
+ strcpy(data.data(), "Hello world");
+ QVERIFY(cache.insert(key, data));
+ // read it out again
+ QByteArray result;
+ QVERIFY(cache.find(key, &result));
+ QCOMPARE(result, data);
+ // another insert
+ strcpy(data.data(), "Hello KDE");
+ QVERIFY(cache.insert(key, data));
+ // and another read
+ QVERIFY(cache.find(key, &result));
+ QCOMPARE(result, data);
+}
+
+QTEST_MAIN(KSharedDataCacheTest)
+
+#include "kshareddatacachetest.moc"
--- /dev/null
+/* This file is part of the KDE libraries
+ Copyright (c) 2003,2007-2008 Oswald Buddenhagen <ossi@kde.org>
+ Copyright (c) 2005 Thomas Braxton <brax108@cox.net>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include <kshell.h>
+#include <kuser.h>
+
+#include <QtTest>
+
+#include <QObject>
+#include <QString>
+#include <QStringList>
+#include <QDir>
+
+class KShellTest : public QObject
+{
+ Q_OBJECT
+
+private Q_SLOTS:
+ void tildeExpand();
+ void quoteArg();
+ void joinArgs();
+ void splitJoin();
+ void quoteSplit();
+ void quoteSplit_data();
+ void abortOnMeta();
+};
+
+// The expansion of ~me isn't exactly QDir::homePath(), in case $HOME has a trailing slash, it's kept.
+static QString myHomePath()
+{
+#ifdef Q_OS_WIN
+ return QDir::homePath();
+#else
+ return QString::fromLocal8Bit(qgetenv("HOME"));
+#endif
+}
+
+void
+KShellTest::tildeExpand()
+{
+ QString me(KUser().loginName());
+ QCOMPARE(KShell::tildeExpand(QStringLiteral("~")), QDir::homePath());
+ QCOMPARE(KShell::tildeExpand(QStringLiteral("~/dir")), QString(QDir::homePath() + QStringLiteral("/dir")));
+ QCOMPARE(KShell::tildeExpand(QLatin1Char('~') + me), myHomePath());
+ QCOMPARE(KShell::tildeExpand(QLatin1Char('~') + me + QStringLiteral("/dir")), QString(myHomePath() + QStringLiteral("/dir")));
+#ifdef Q_OS_WIN
+ QCOMPARE(KShell::tildeExpand(QStringLiteral("^~") + me), QString(QLatin1Char('~') + me));
+#else
+ QCOMPARE(KShell::tildeExpand(QStringLiteral("\\~") + me), QString(QStringLiteral("~") + me));
+#endif
+}
+
+void
+KShellTest::quoteArg()
+{
+#ifdef Q_OS_WIN
+ QCOMPARE(KShell::quoteArg(QStringLiteral("a space")), QStringLiteral("\"a space\""));
+ QCOMPARE(KShell::quoteArg(QStringLiteral("fds\\\"")), QStringLiteral("fds\\\\\\^\""));
+ QCOMPARE(KShell::quoteArg(QStringLiteral("\\\\foo")), QStringLiteral("\\\\foo"));
+ QCOMPARE(KShell::quoteArg(QStringLiteral("\"asdf\"")), QStringLiteral("\\^\"asdf\\^\""));
+ QCOMPARE(KShell::quoteArg(QStringLiteral("with\\")), QStringLiteral("\"with\\\\\""));
+ QCOMPARE(KShell::quoteArg(QStringLiteral("\\\\")), QStringLiteral("\"\\\\\\\\\""));
+ QCOMPARE(KShell::quoteArg(QStringLiteral("\"a space\\\"")), QStringLiteral("\\^\"\"a space\"\\\\\\^\""));
+ QCOMPARE(KShell::quoteArg(QStringLiteral("as df\\")), QStringLiteral("\"as df\\\\\""));
+ QCOMPARE(KShell::quoteArg(QStringLiteral("foo bar\"\\\"bla")), QStringLiteral("\"foo bar\"\\^\"\\\\\\^\"\"bla\""));
+ QCOMPARE(KShell::quoteArg(QStringLiteral("a % space")), QStringLiteral("\"a %PERCENT_SIGN% space\""));
+#else
+ QCOMPARE(KShell::quoteArg(QStringLiteral("a space")), QStringLiteral("'a space'"));
+#endif
+}
+
+void
+KShellTest::joinArgs()
+{
+ QStringList list;
+ list << QStringLiteral("this") << QStringLiteral("is") << QStringLiteral("a") << QStringLiteral("test");
+ QCOMPARE(KShell::joinArgs(list), QStringLiteral("this is a test"));
+}
+
+static QString sj(const QString &str, KShell::Options flags, KShell::Errors *ret)
+{
+ return KShell::joinArgs(KShell::splitArgs(str, flags, ret));
+}
+
+void
+KShellTest::splitJoin()
+{
+ KShell::Errors err = KShell::NoError;
+
+#ifdef Q_OS_WIN
+ QCOMPARE(sj(QStringLiteral("\"(sulli)\" text"), KShell::NoOptions, &err),
+ QStringLiteral("\"(sulli)\" text"));
+ QVERIFY(err == KShell::NoError);
+
+ QCOMPARE(sj(QStringLiteral(" ha\\ lo "), KShell::NoOptions, &err),
+ QStringLiteral("\"ha\\\\\" lo"));
+ QVERIFY(err == KShell::NoError);
+
+ QCOMPARE(sj(QStringLiteral("say \" error"), KShell::NoOptions, &err),
+ QString());
+ QVERIFY(err == KShell::BadQuoting);
+
+ QCOMPARE(sj(QStringLiteral("no \" error\""), KShell::NoOptions, &err),
+ QStringLiteral("no \" error\""));
+ QVERIFY(err == KShell::NoError);
+
+ QCOMPARE(sj(QStringLiteral("say \" still error"), KShell::NoOptions, &err),
+ QString());
+ QVERIFY(err == KShell::BadQuoting);
+
+ QCOMPARE(sj(QStringLiteral("BLA;asdf sdfess d"), KShell::NoOptions, &err),
+ QStringLiteral("\"BLA;asdf\" sdfess d"));
+ QVERIFY(err == KShell::NoError);
+
+ QCOMPARE(sj(QStringLiteral("B\"L\"A&sdf FOO|bar sdf wer "), KShell::NoOptions, &err),
+ QStringLiteral("\"BLA&sdf\" \"FOO|bar\" sdf wer"));
+ QVERIFY(err == KShell::NoError);
+
+ QCOMPARE(sj(QStringLiteral("\"\"\"just \"\" fine\"\"\""), KShell::NoOptions, &err),
+ QStringLiteral("\\^\"\"just \"\\^\"\" fine\"\\^\""));
+ QVERIFY(err == KShell::NoError);
+#else
+ QCOMPARE(sj(QString::fromUtf8("\"~qU4rK\" 'text' 'jo'\"jo\" $'crap' $'\\\\\\'\\e\\x21' ha\\ lo \\a"), KShell::NoOptions, &err),
+ QString::fromUtf8("'~qU4rK' text jojo crap '\\'\\''\x1b!' 'ha lo' a"));
+ QVERIFY(err == KShell::NoError);
+
+ QCOMPARE(sj(QStringLiteral("\"~qU4rK\" 'text'"), KShell::TildeExpand, &err),
+ QStringLiteral("'~qU4rK' text"));
+ QVERIFY(err == KShell::NoError);
+
+ QCOMPARE(sj(QStringLiteral("~\"qU4rK\" 'text'"), KShell::TildeExpand, &err),
+ QStringLiteral("'~qU4rK' text"));
+ QVERIFY(err == KShell::NoError);
+
+ QCOMPARE(sj(QStringLiteral("~/\"dir\" 'text'"), KShell::TildeExpand, &err),
+ QString(QDir::homePath() + QStringLiteral("/dir text")));
+ QVERIFY(err == KShell::NoError);
+
+ QCOMPARE(sj(QStringLiteral("~ 'text' ~"), KShell::TildeExpand, &err),
+ QString(QDir::homePath() + QStringLiteral(" text ") + QDir::homePath()));
+ QVERIFY(err == KShell::NoError);
+
+ QCOMPARE(sj(QStringLiteral("\\~ blah"), KShell::TildeExpand, &err),
+ QStringLiteral("'~' blah"));
+ QVERIFY(err == KShell::NoError);
+
+ QCOMPARE(sj(QStringLiteral("~qU4rK ~") + KUser().loginName(), KShell::TildeExpand, &err),
+ QString(QStringLiteral("'~qU4rK' ") + myHomePath()));
+ QVERIFY(err == KShell::NoError);
+
+ const QString unicodeSpaceFileName = QStringLiteral("test テスト.txt"); // #345140
+ QCOMPARE(sj(unicodeSpaceFileName, KShell::AbortOnMeta | KShell::TildeExpand, &err),
+ unicodeSpaceFileName);
+ QVERIFY(err == KShell::NoError);
+#endif
+}
+
+
+void
+KShellTest::quoteSplit_data()
+{
+ QTest::addColumn<QString>("string");
+
+ QTest::newRow("no space") << QStringLiteral("hiho");
+ QTest::newRow("regular space") << QStringLiteral("hi there");
+ QTest::newRow("special space") << QString::fromUtf8("如何定期清潔典型的電風扇 講義.pdf");
+}
+
+void
+KShellTest::quoteSplit()
+{
+ QFETCH(QString, string);
+
+ // Splitting a quote arg should always just return one argument
+ const QStringList args = KShell::splitArgs(KShell::quoteArg(string));
+ QCOMPARE(args.count(), 1);
+}
+
+void
+KShellTest::abortOnMeta()
+{
+ KShell::Errors err1 = KShell::NoError, err2 = KShell::NoError;
+
+ QCOMPARE(sj(QStringLiteral("text"), KShell::AbortOnMeta, &err1),
+ QStringLiteral("text"));
+ QVERIFY(err1 == KShell::NoError);
+
+#ifdef Q_OS_WIN
+ QVERIFY(KShell::splitArgs(QStringLiteral("BLA & asdf sdfess d"), KShell::AbortOnMeta, &err1).isEmpty());
+ QVERIFY(err1 == KShell::FoundMeta);
+
+ QVERIFY(KShell::splitArgs(QStringLiteral("foo %PATH% bar"), KShell::AbortOnMeta, &err1).isEmpty());
+ QVERIFY(err1 == KShell::FoundMeta);
+ QCOMPARE(sj(QStringLiteral("foo %PERCENT_SIGN% bar"), KShell::AbortOnMeta, &err1),
+ QStringLiteral("foo %PERCENT_SIGN% bar"));
+ QVERIFY(err1 == KShell::NoError);
+
+ QCOMPARE(sj(QStringLiteral("@foo ^& bar"), KShell::AbortOnMeta, &err1),
+ QStringLiteral("foo \"&\" bar"));
+ QVERIFY(err1 == KShell::NoError);
+
+ QCOMPARE(sj(QStringLiteral("\"BLA|asdf\" sdfess d"), KShell::AbortOnMeta, &err1),
+ QStringLiteral("\"BLA|asdf\" sdfess d"));
+ QVERIFY(err1 == KShell::NoError);
+
+ QCOMPARE(sj(QStringLiteral("B\"L\"A\"|\"sdf \"FOO | bar\" sdf wer"), KShell::AbortOnMeta, &err1),
+ QStringLiteral("\"BLA|sdf\" \"FOO | bar\" sdf wer"));
+ QVERIFY(err1 == KShell::NoError);
+
+ QCOMPARE(sj(QStringLiteral("b-q me \\\\^|\\\\\\^\""), KShell::AbortOnMeta, &err1),
+ QStringLiteral("b-q me \"\\\\|\"\\\\\\^\""));
+ QVERIFY(err1 == KShell::NoError);
+#else
+ QCOMPARE(sj(QStringLiteral("say \" error"), KShell::NoOptions, &err1),
+ QString());
+ QVERIFY(err1 != KShell::NoError);
+
+ QCOMPARE(sj(QStringLiteral("say \" still error"), KShell::AbortOnMeta, &err1),
+ QString());
+ QVERIFY(err1 != KShell::NoError);
+
+ QVERIFY(sj(QStringLiteral("say `echo no error`"), KShell::NoOptions, &err1) !=
+ sj(QStringLiteral("say `echo no error`"), KShell::AbortOnMeta, &err2));
+ QVERIFY(err1 != err2);
+
+ QVERIFY(sj(QStringLiteral("BLA=say echo meta"), KShell::NoOptions, &err1) !=
+ sj(QStringLiteral("BLA=say echo meta"), KShell::AbortOnMeta, &err2));
+ QVERIFY(err1 != err2);
+
+ QVERIFY(sj(QStringLiteral("B\"L\"A=say FOO=bar echo meta"), KShell::NoOptions, &err1) ==
+ sj(QStringLiteral("B\"L\"A=say FOO=bar echo meta"), KShell::AbortOnMeta, &err2));
+#endif
+}
+
+QTEST_MAIN(KShellTest)
+
+#include "kshelltest.moc"
--- /dev/null
+
+#include "kstringhandlertest.h"
+
+#include <QTest>
+
+QTEST_MAIN(KStringHandlerTest)
+
+#include "kstringhandler.h"
+
+QString KStringHandlerTest::test = QStringLiteral("The quick brown fox jumped over the lazy bridge. ");
+
+void KStringHandlerTest::capwords()
+{
+ QCOMPARE(KStringHandler::capwords(test),
+ QStringLiteral("The Quick Brown Fox Jumped Over The Lazy Bridge. "));
+}
+
+void KStringHandlerTest::tagURLs()
+{
+ QString test = QStringLiteral("Click on https://foo@bar:www.kde.org/yoyo/dyne.html#a1 for info.");
+ QCOMPARE(KStringHandler::tagUrls(test),
+ QStringLiteral("Click on <a href=\"https://foo@bar:www.kde.org/yoyo/dyne.html#a1\">https://foo@bar:www.kde.org/yoyo/dyne.html#a1</a> for info."));
+
+ test = QStringLiteral("http://www.foo.org/story$806");
+ QCOMPARE(KStringHandler::tagUrls(test),
+ QStringLiteral("<a href=\"http://www.foo.org/story$806\">http://www.foo.org/story$806</a>"));
+
+#if 0
+ // XFAIL - i.e. this needs to be fixed, but has never been
+ test = "<a href=www.foo.com>";
+ check("tagURLs()", KStringHandler::tagURLs(test),
+ "<a href=<a href=\"www.foo.com\">www.foo.com</a>>");
+#endif
+}
+
+void KStringHandlerTest::perlSplit()
+{
+ QStringList expected;
+ expected << QStringLiteral("some") << QStringLiteral("string") << QStringLiteral("for")
+ << QStringLiteral("you__here");
+ QCOMPARE(KStringHandler::perlSplit(QStringLiteral("__"), QStringLiteral("some__string__for__you__here"), 4), expected);
+
+ expected.clear();
+ expected << QStringLiteral("kparts") << QStringLiteral("reaches") << QStringLiteral("the parts other parts can't");
+ QCOMPARE(KStringHandler::perlSplit(QLatin1Char(' '),
+ QStringLiteral("kparts reaches the parts other parts can't"), 3), expected);
+
+ expected.clear();
+ expected << QStringLiteral("Split") << QStringLiteral("me") << QStringLiteral("up ! I'm bored ! OK ?");
+ QCOMPARE(KStringHandler::perlSplit(QRegExp(QStringLiteral("[! ]")),
+ QStringLiteral("Split me up ! I'm bored ! OK ?"), 3), expected);
+}
+
+void KStringHandlerTest::obscure()
+{
+ // See bug 167900, obscure() produced chars that could not properly be converted to and from
+ // UTF8. The result was that storing passwords with '!' in them did not work.
+ QString test = QStringLiteral("!TEST!");
+ QString obscured = KStringHandler::obscure(test);
+ QByteArray obscuredBytes = obscured.toUtf8();
+ QCOMPARE(KStringHandler::obscure(QString::fromUtf8(obscuredBytes.constData())), test);
+}
+
+void KStringHandlerTest::preProcessWrap_data()
+{
+ const QChar zwsp(0x200b);
+
+ QTest::addColumn<QString>("string");
+ QTest::addColumn<QString>("expected");
+
+ // Should result in no additional breaks
+ QTest::newRow("spaces") << "foo bar baz" << "foo bar baz";
+
+ // Should insert a ZWSP after each '_'
+ QTest::newRow("underscores") << "foo_bar_baz"
+ << QString(QStringLiteral("foo_") + zwsp + QStringLiteral("bar_") + zwsp + QStringLiteral("baz"));
+
+ // Should insert a ZWSP after each '-'
+ QTest::newRow("hyphens") << "foo-bar-baz"
+ << QString(QStringLiteral("foo-") + zwsp +
+ QStringLiteral("bar-") + zwsp + QStringLiteral("baz"));
+
+ // Should insert a ZWSP after each '.'
+ QTest::newRow("periods") << "foo.bar.baz"
+ << QString(QStringLiteral("foo.") +
+ zwsp + QStringLiteral("bar.") + zwsp + QStringLiteral("baz"));
+
+ // Should insert a ZWSP after each ','
+ QTest::newRow("commas") << "foo,bar,baz"
+ << QString(QStringLiteral("foo,") + zwsp +
+ QStringLiteral("bar,") + zwsp + QStringLiteral("baz"));
+
+ // Should result in no additional breaks since the '_'s are followed by spaces
+ QTest::newRow("mixed underscores and spaces")
+ << "foo_ bar_ baz" << "foo_ bar_ baz";
+
+ // Should result in no additional breaks since the '_' is the last char
+ QTest::newRow("ends with underscore") << "foo_" << "foo_";
+
+ // Should insert a ZWSP before '(' and after ')'
+ QTest::newRow("parens") << "foo(bar)baz"
+ << QString(QStringLiteral("foo") + zwsp +
+ QStringLiteral("(bar)") + zwsp + QStringLiteral("baz"));
+
+ // Should insert a ZWSP before '[' and after ']'
+ QTest::newRow("brackets") << "foo[bar]baz"
+ << QString(QStringLiteral("foo") + zwsp +
+ QStringLiteral("[bar]") + zwsp + QStringLiteral("baz"));
+
+ // Should insert a ZWSP before '{' and after '}'
+ QTest::newRow("curly braces") << "foo{bar}baz"
+ << QString(QStringLiteral("foo") + zwsp +
+ QStringLiteral("{bar}") + zwsp + QStringLiteral("baz"));
+
+ // Should insert a ZWSP before '(' but not after ')' since it's the last char
+ QTest::newRow("ends with ')'") << "foo(bar)"
+ << QString(QStringLiteral("foo") + zwsp + QStringLiteral("(bar)"));
+
+ // Should insert a single ZWSP between the '_' and the '('
+ QTest::newRow("'_' followed by '('") << "foo_(bar)"
+ << QString(QStringLiteral("foo_") + zwsp + QStringLiteral("(bar)"));
+
+ // Should insert ZWSP's between the '_' and the '[', between the double
+ // '['s and the double ']'s, but not before and after 'bar'
+ QTest::newRow("'_' before double brackets") << "foo_[[bar]]"
+ << QString(QStringLiteral("foo_") + zwsp +
+ QStringLiteral("[") + zwsp + QStringLiteral("[bar]") + zwsp +
+ QStringLiteral("]"));
+
+ // Should only insert ZWSP's between the double '['s and the double ']'s
+ QTest::newRow("space before double brackets") << "foo [[bar]]"
+ << QString(QStringLiteral("foo [") + zwsp + QStringLiteral("[bar]") + zwsp + QStringLiteral("]"));
+
+ // Shouldn't result in any additional breaks since the '(' is preceded
+ // by a space, and the ')' is followed by a space.
+ QTest::newRow("parens with spaces") << "foo (bar) baz" << "foo (bar) baz";
+
+ // Should insert a WJ (Word Joiner) before a single quote
+ const QChar wj(0x2060);
+ QTest::newRow("single quote") << "foo'bar" << QString(QStringLiteral("foo") + QString(wj) + QStringLiteral("'bar"));
+}
+
+static QString replaceZwsp(const QString &string)
+{
+ const QChar zwsp(0x200b);
+
+ QString result;
+ for (int i = 0; i < string.length(); i++)
+ if (string[i] == zwsp) {
+ result += QStringLiteral("<zwsp>");
+ } else {
+ result += string[i];
+ }
+
+ return result;
+}
+
+void KStringHandlerTest::preProcessWrap()
+{
+ QFETCH(QString, string);
+ QFETCH(QString, expected);
+
+ QCOMPARE(replaceZwsp(KStringHandler::preProcessWrap(string)),
+ replaceZwsp(expected));
+}
+
+void KStringHandlerTest::logicalLength_data()
+{
+ QTest::addColumn<QString>("string");
+ QTest::addColumn<int>("expected");
+
+ QTest::newRow("Latin") << "foo bar baz" << 11;
+ QTest::newRow("Chinese") << QString::fromUtf8("\xe4\xbd\xa0\xe5\xa5\xbd") << 4;
+ QTest::newRow("Japanese") << QString::fromUtf8("\xe9\x9d\x92\xe3\x81\x84\xe7\xa9\xba") << 6;
+ QTest::newRow("Korean") << QString::fromUtf8("\xed\x95\x9c\xea\xb5\xad\xec\x96\xb4") << 6;
+ QTest::newRow("Mixed") << QString::fromUtf8("KDE\xe6\xa1\x8c\xe9\x9d\xa2") << 7;
+}
+
+void KStringHandlerTest::logicalLength()
+{
+ QFETCH(QString, string);
+ QFETCH(int, expected);
+ QCOMPARE(KStringHandler::logicalLength(string), expected);
+}
+
--- /dev/null
+#ifndef KSTRINGHANDLERTEST_H
+#define KSTRINGHANDLERTEST_H
+
+#include <QObject>
+
+class KStringHandlerTest : public QObject
+{
+ Q_OBJECT
+
+private Q_SLOTS:
+ void capwords();
+ void tagURLs();
+ void perlSplit();
+ void obscure();
+ void preProcessWrap_data();
+ void preProcessWrap();
+ void logicalLength_data();
+ void logicalLength();
+
+private:
+ static QString test;
+};
+
+#endif
--- /dev/null
+/*
+ Copyright (C) 2005 Ingo Kloecker <kloecker@kde.org>
+ Copyright (C) 2007 Allen Winter <winter@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include "ktexttohtmltest.h"
+
+#include "../src/lib/text/ktexttohtml.h"
+#include "../src/lib/text/ktexttohtml_p.h"
+
+#include <QtTest>
+#include <QDebug>
+#include <QUrl>
+
+QTEST_MAIN(KTextToHTMLTest)
+
+Q_DECLARE_METATYPE(KTextToHTML::Options)
+
+#ifndef Q_OS_WIN
+void initLocale()
+{
+ setenv("LC_ALL", "en_US.utf-8", 1);
+}
+Q_CONSTRUCTOR_FUNCTION(initLocale)
+#endif
+
+
+void KTextToHTMLTest::testGetEmailAddress()
+{
+ // empty input
+ const QString emptyQString;
+ KTextToHTMLHelper ll1(emptyQString, 0);
+ QVERIFY(ll1.getEmailAddress().isEmpty());
+
+ // no '@' at scan position
+ KTextToHTMLHelper ll2(QStringLiteral("foo@bar.baz"), 0);
+ QVERIFY(ll2.getEmailAddress().isEmpty());
+
+ // '@' in local part
+ KTextToHTMLHelper ll3(QStringLiteral("foo@bar@bar.baz"), 7);
+ QVERIFY(ll3.getEmailAddress().isEmpty());
+
+ // empty local part
+ KTextToHTMLHelper ll4(QStringLiteral("@bar.baz"), 0);
+ QVERIFY(ll4.getEmailAddress().isEmpty());
+ KTextToHTMLHelper ll5(QStringLiteral(".@bar.baz"), 1);
+ QVERIFY(ll5.getEmailAddress().isEmpty());
+ KTextToHTMLHelper ll6(QStringLiteral(" @bar.baz"), 1);
+ QVERIFY(ll6.getEmailAddress().isEmpty());
+ KTextToHTMLHelper ll7(QStringLiteral(".!#$%&'*+-/=?^_`{|}~@bar.baz"),
+ qstrlen(".!#$%&'*+-/=?^_`{|}~"));
+ QVERIFY(ll7.getEmailAddress().isEmpty());
+
+ // allowed special chars in local part of address
+ KTextToHTMLHelper ll8(QStringLiteral("a.!#$%&'*+-/=?^_`{|}~@bar.baz"),
+ qstrlen("a.!#$%&'*+-/=?^_`{|}~"));
+ QCOMPARE(ll8.getEmailAddress(), QStringLiteral("a.!#$%&'*+-/=?^_`{|}~@bar.baz"));
+
+ // '@' in domain part
+ KTextToHTMLHelper ll9(QStringLiteral("foo@bar@bar.baz"), 3);
+ QVERIFY(ll9.getEmailAddress().isEmpty());
+
+ // domain part without dot
+ KTextToHTMLHelper lla(QStringLiteral("foo@bar"), 3);
+ QVERIFY(lla.getEmailAddress().isEmpty());
+ KTextToHTMLHelper llb(QStringLiteral("foo@bar."), 3);
+ QVERIFY(llb.getEmailAddress().isEmpty());
+ KTextToHTMLHelper llc(QStringLiteral(".foo@bar"), 4);
+ QVERIFY(llc.getEmailAddress().isEmpty());
+ KTextToHTMLHelper lld(QStringLiteral("foo@bar "), 3);
+ QVERIFY(lld.getEmailAddress().isEmpty());
+ KTextToHTMLHelper lle(QStringLiteral(" foo@bar"), 4);
+ QVERIFY(lle.getEmailAddress().isEmpty());
+ KTextToHTMLHelper llf(QStringLiteral("foo@bar-bar"), 3);
+ QVERIFY(llf.getEmailAddress().isEmpty());
+
+ // empty domain part
+ KTextToHTMLHelper llg(QStringLiteral("foo@"), 3);
+ QVERIFY(llg.getEmailAddress().isEmpty());
+ KTextToHTMLHelper llh(QStringLiteral("foo@."), 3);
+ QVERIFY(llh.getEmailAddress().isEmpty());
+ KTextToHTMLHelper lli(QStringLiteral("foo@-"), 3);
+ QVERIFY(lli.getEmailAddress().isEmpty());
+
+ // simple address
+ KTextToHTMLHelper llj(QStringLiteral("foo@bar.baz"), 3);
+ QCOMPARE(llj.getEmailAddress(), QStringLiteral("foo@bar.baz"));
+ KTextToHTMLHelper llk(QStringLiteral("foo@bar.baz."), 3);
+ QCOMPARE(llk.getEmailAddress(), QStringLiteral("foo@bar.baz"));
+ KTextToHTMLHelper lll(QStringLiteral(".foo@bar.baz"), 4);
+ QCOMPARE(lll.getEmailAddress(), QStringLiteral("foo@bar.baz"));
+ KTextToHTMLHelper llm(QStringLiteral("foo@bar.baz-"), 3);
+ QCOMPARE(llm.getEmailAddress(), QStringLiteral("foo@bar.baz"));
+ KTextToHTMLHelper lln(QStringLiteral("-foo@bar.baz"), 4);
+ QCOMPARE(lln.getEmailAddress(), QStringLiteral("foo@bar.baz"));
+ KTextToHTMLHelper llo(QStringLiteral("foo@bar.baz "), 3);
+ QCOMPARE(llo.getEmailAddress(), QStringLiteral("foo@bar.baz"));
+ KTextToHTMLHelper llp(QStringLiteral(" foo@bar.baz"), 4);
+ QCOMPARE(llp.getEmailAddress(), QStringLiteral("foo@bar.baz"));
+ KTextToHTMLHelper llq(QStringLiteral("foo@bar-bar.baz"), 3);
+ QCOMPARE(llq.getEmailAddress(), QStringLiteral("foo@bar-bar.baz"));
+}
+
+void KTextToHTMLTest::testGetUrl()
+{
+ QStringList brackets;
+ brackets << QStringLiteral("") << QStringLiteral(""); // no brackets
+ brackets << QStringLiteral("<") << QStringLiteral(">");
+ brackets << QStringLiteral("[") << QStringLiteral("]");
+ brackets << QStringLiteral("\"") << QStringLiteral("\"");
+ brackets << QStringLiteral("<link>") << QStringLiteral("</link>");
+
+ for (int i = 0; i < brackets.count(); i += 2) {
+ testGetUrl2(brackets[ i ], brackets[ i + 1 ]);
+ }
+}
+
+void KTextToHTMLTest::testGetUrl2(const QString &left, const QString &right)
+{
+ QStringList schemas;
+ schemas << QStringLiteral("http://");
+ schemas << QStringLiteral("https://");
+ schemas << QStringLiteral("vnc://");
+ schemas << QStringLiteral("fish://");
+ schemas << QStringLiteral("ftp://");
+ schemas << QStringLiteral("ftps://");
+ schemas << QStringLiteral("sftp://");
+ schemas << QStringLiteral("smb://");
+ schemas << QStringLiteral("file://");
+
+ QStringList urls;
+ urls << QStringLiteral("www.kde.org");
+ urls << QStringLiteral("user@www.kde.org");
+ urls << QStringLiteral("user:pass@www.kde.org");
+ urls << QStringLiteral("user:pass@www.kde.org:1234");
+ urls << QStringLiteral("user:pass@www.kde.org:1234/sub/path");
+ urls << QStringLiteral("user:pass@www.kde.org:1234/sub/path?a=1");
+ urls << QStringLiteral("user:pass@www.kde.org:1234/sub/path?a=1#anchor");
+ urls << QStringLiteral("user:pass@www.kde.org:1234/sub/\npath \n /long/ path \t ?a=1#anchor");
+ urls << QStringLiteral("user:pass@www.kde.org:1234/sub/path/special(123)?a=1#anchor");
+ urls << QStringLiteral("user:pass@www.kde.org:1234/sub/path:with:colon/special(123)?a=1#anchor");
+ urls << QStringLiteral("user:pass@www.kde.org:1234/sub/path:with:colon/special(123)?a=1#anchor[bla");
+ urls << QStringLiteral("user:pass@www.kde.org:1234/sub/path:with:colon/special(123)?a=1#anchor[bla]");
+ urls << QStringLiteral("user:pass@www.kde.org:1234/\nsub/path:with:colon/\nspecial(123)?\na=1#anchor[bla]");
+ urls << QStringLiteral("user:pass@www.kde.org:1234/ \n sub/path:with:colon/ \n\t \t special(123)?") +
+ QStringLiteral("\n\t \n\t a=1#anchor[bla]");
+
+ foreach (const QString &schema, schemas) {
+ foreach (QString url, urls) { //krazy:exclude=foreach
+ // by definition: if the URL is enclosed in brackets, the URL itself is not allowed
+ // to contain the closing bracket, as this would be detected as the end of the URL
+ if ((left.length() == 1) && (url.contains(right[ 0 ]))) {
+ continue;
+ }
+
+ // if the url contains a whitespace, it must be enclosed with brackets
+ if ((url.contains(QLatin1Char('\n')) || url.contains(QLatin1Char('\t')) || url.contains(QLatin1Char(' '))) &&
+ left.isEmpty()) {
+ continue;
+ }
+
+ QString test(left + schema + url + right);
+ KTextToHTMLHelper ll(test, left.length());
+ QString gotUrl = ll.getUrl();
+
+ // we want to have the url without whitespace
+ url.remove(QLatin1Char(' '));
+ url.remove(QLatin1Char('\n'));
+ url.remove(QLatin1Char('\t'));
+
+ bool ok = (gotUrl == (schema + url));
+ //qDebug() << "check:" << (ok ? "OK" : "NOK") << test << "=>" << (schema + url);
+ if (!ok) {
+ qDebug() << "got:" << gotUrl;
+ }
+ QVERIFY2(ok, qPrintable(test));
+ }
+ }
+
+ QStringList urlsWithoutSchema;
+ urlsWithoutSchema << QStringLiteral(".kde.org");
+ urlsWithoutSchema << QStringLiteral(".kde.org:1234/sub/path");
+ urlsWithoutSchema << QStringLiteral(".kde.org:1234/sub/path?a=1");
+ urlsWithoutSchema << QStringLiteral(".kde.org:1234/sub/path?a=1#anchor");
+ urlsWithoutSchema << QStringLiteral(".kde.org:1234/sub/path/special(123)?a=1#anchor");
+ urlsWithoutSchema << QStringLiteral(".kde.org:1234/sub/path:with:colon/special(123)?a=1#anchor");
+ urlsWithoutSchema << QStringLiteral(".kde.org:1234/sub/path:with:colon/special(123)?a=1#anchor[bla");
+ urlsWithoutSchema << QStringLiteral(".kde.org:1234/sub/path:with:colon/special(123)?a=1#anchor[bla]");
+ urlsWithoutSchema << QStringLiteral(".kde.org:1234/\nsub/path:with:colon/\nspecial(123)?\na=1#anchor[bla]");
+ urlsWithoutSchema << QStringLiteral(".kde.org:1234/ \n sub/path:with:colon/ \n\t \t special(123)?") +
+ QStringLiteral("\n\t \n\t a=1#anchor[bla]");
+
+ QStringList starts;
+ starts << QStringLiteral("www") << QStringLiteral("ftp") << QStringLiteral("news:www");
+
+ foreach (const QString &start, starts) {
+ foreach (QString url, urlsWithoutSchema) { //krazy:exclude=foreach
+ // by definition: if the URL is enclosed in brackets, the URL itself is not allowed
+ // to contain the closing bracket, as this would be detected as the end of the URL
+ if ((left.length() == 1) && (url.contains(right[ 0 ]))) {
+ continue;
+ }
+
+ // if the url contains a whitespace, it must be enclosed with brackets
+ if ((url.contains(QLatin1Char('\n')) || url.contains(QLatin1Char('\t')) || url.contains(QLatin1Char(' '))) &&
+ left.isEmpty()) {
+ continue;
+ }
+
+ QString test(left + start + url + right);
+ KTextToHTMLHelper ll(test, left.length());
+ QString gotUrl = ll.getUrl();
+
+ // we want to have the url without whitespace
+ url.remove(QLatin1Char(' '));
+ url.remove(QLatin1Char('\n'));
+ url.remove(QLatin1Char('\t'));
+
+ bool ok = (gotUrl == (start + url));
+ //qDebug() << "check:" << (ok ? "OK" : "NOK") << test << "=>" << (start + url);
+ if (!ok) {
+ qDebug() << "got:" << gotUrl;
+ }
+ QVERIFY2(ok, qPrintable(gotUrl));
+ }
+ }
+
+ // test max url length
+ QString url = QStringLiteral("https://www.kde.org/this/is/a_very_loooooong_url/test/test/test");
+ {
+ KTextToHTMLHelper ll(url, 0, 10);
+ QVERIFY(ll.getUrl().isEmpty()); // url too long
+ }
+ {
+ KTextToHTMLHelper ll(url, 0, url.length() - 1);
+ QVERIFY(ll.getUrl().isEmpty()); // url too long
+ }
+ {
+ KTextToHTMLHelper ll(url, 0, url.length());
+ QCOMPARE(ll.getUrl(), url);
+ }
+ {
+ KTextToHTMLHelper ll(url, 0, url.length() + 1);
+ QCOMPARE(ll.getUrl(), url);
+ }
+
+ // mailto
+ {
+ QString addr = QStringLiteral("mailto:test@kde.org");
+ QString test(left + addr + right);
+ KTextToHTMLHelper ll(test, left.length());
+
+ QString gotUrl = ll.getUrl();
+
+ bool ok = (gotUrl == addr);
+ //qDebug() << "check:" << (ok ? "OK" : "NOK") << test << "=>" << addr;
+ if (!ok) {
+ qDebug() << "got:" << gotUrl;
+ }
+ QVERIFY2(ok, qPrintable(gotUrl));
+ }
+}
+
+void KTextToHTMLTest::testHtmlConvert_data()
+{
+ QTest::addColumn<QString>("plainText");
+ QTest::addColumn<KTextToHTML::Options>("flags");
+ QTest::addColumn<QString>("htmlText");
+
+ // Linker error when using PreserveSpaces, therefore the hardcoded 0x01 or 0x09
+
+ // Test preserving whitespace correctly
+ QTest::newRow("") << " foo"
+ << KTextToHTML::Options(KTextToHTML::PreserveSpaces)
+ << " foo";
+ QTest::newRow("") << " foo"
+ << KTextToHTML::Options(KTextToHTML::PreserveSpaces)
+ << " foo";
+ QTest::newRow("") << " foo "
+ << KTextToHTML::Options(KTextToHTML::PreserveSpaces)
+ << " foo ";
+ QTest::newRow("") << " foo "
+ << KTextToHTML::Options(KTextToHTML::PreserveSpaces)
+ << " foo ";
+ QTest::newRow("") << "bla bla bla bla bla"
+ << KTextToHTML::Options(KTextToHTML::PreserveSpaces)
+ << "bla bla bla bla bla";
+ QTest::newRow("") << "bla bla bla \n bla bla bla "
+ << KTextToHTML::Options(KTextToHTML::PreserveSpaces)
+ << "bla bla bla <br />\n bla bla bla ";
+ QTest::newRow("") << "bla bla bla"
+ << KTextToHTML::Options(KTextToHTML::PreserveSpaces)
+ << "bla bla bla";
+ QTest::newRow("") << " bla bla \n bla bla a\n bla bla "
+ << KTextToHTML::Options(KTextToHTML::PreserveSpaces)
+ << " bla bla <br />\n bla bla a<br />\n"
+ " bla bla ";
+
+ // Test highlighting with *, / and _
+ QTest::newRow("") << "Ce paragraphe _contient_ des mots ou des _groupes de mots_ à mettre en"
+ " forme…"
+ << KTextToHTML::Options(KTextToHTML::PreserveSpaces | KTextToHTML::HighlightText)
+ << "Ce paragraphe <u>_contient_</u> des mots ou des"
+ " <u>_groupes de mots_</u> à mettre en forme…";
+ QTest::newRow("punctation-bug") << "Ce texte *a l'air* de _fonctionner_, à condition"
+ " d’utiliser le guillemet ASCII."
+ << KTextToHTML::Options(KTextToHTML::PreserveSpaces | KTextToHTML::HighlightText)
+ << "Ce texte <b>*a l'air*</b> de <u>_fonctionner_</u>, à"
+ " condition d’utiliser le guillemet ASCII.";
+ QTest::newRow("punctation-bug") << "Un répertoire /est/ un *dossier* où on peut mettre des"
+ " *fichiers*."
+ << KTextToHTML::Options(KTextToHTML::PreserveSpaces | KTextToHTML::HighlightText)
+ << "Un répertoire <i>/est/</i> un"
+ " <b>*dossier*</b> où on peut mettre des <b>*fichiers*</b>.";
+ QTest::newRow("punctation-bug") << "*BLA BLA BLA BLA*."
+ << KTextToHTML::Options(KTextToHTML::PreserveSpaces | KTextToHTML::HighlightText)
+ << "<b>BLA BLA BLA BLA</b>.";
+ QTest::newRow("") << "Je vais tenter de repérer des faux positif*"
+ << KTextToHTML::Options(KTextToHTML::PreserveSpaces | KTextToHTML::HighlightText)
+ << "Je vais tenter de repérer des faux positif*";
+ QTest::newRow("") << "*Ouais !* *Yes!*"
+ << KTextToHTML::Options(KTextToHTML::PreserveSpaces | KTextToHTML::HighlightText)
+ << "<b>*Ouais !*</b> <b>*Yes!*</b>";
+ QTest::newRow("") << "the /etc/{rsyslog.d,syslog-ng.d}/package.rpmnew file"
+ << KTextToHTML::Options(KTextToHTML::PreserveSpaces | KTextToHTML::HighlightText)
+ << "the /etc/{rsyslog.d,syslog-ng.d}/package.rpmnew file";
+
+ // This test has problems with the encoding, apparently.
+ //QTest::newRow( "" ) << "*Ça fait plaisir de pouvoir utiliser des lettres accentuées dans du"
+ // " texte mis en forme*." << 0x09 << "<b>Ça fait plaisir de pouvoir"
+ // " utiliser des lettres accentuées dans du texte mis en forme</b>.";
+
+ // Bug reported by dfaure, the <hostname> would get lost
+ QTest::newRow("") << "QUrl url(\"http://strange<hostname>/\");"
+ << KTextToHTML::Options(KTextToHTML::ReplaceSmileys | KTextToHTML::HighlightText)
+ << "QUrl url("<a href=\"http://strange<hostname>/\">"
+ "http://strange<hostname>/</a>");";
+
+ // Bug: 211128 - plain text emails should not replace ampersand & with &
+ QTest::newRow("bug211128") << "https://green-site/?Ticket=85&Page=next"
+ << KTextToHTML::Options(KTextToHTML::PreserveSpaces)
+ << "<a href=\"https://green-site/?Ticket=85&Page=next\">"
+ "https://green-site/?Ticket=85&Page=next</a>";
+
+ QTest::newRow("dotBeforeEnd") << "Look at this file: www.example.com/example.h"
+ << KTextToHTML::Options(KTextToHTML::PreserveSpaces)
+ << "Look at this file: <a href=\"http://www.example.com/example.h\">"
+ "www.example.com/example.h</a>";
+ QTest::newRow("dotInMiddle") << "Look at this file: www.example.com/.bashrc"
+ << KTextToHTML::Options(KTextToHTML::PreserveSpaces)
+ << "Look at this file: <a href=\"http://www.example.com/.bashrc\">"
+ "www.example.com/.bashrc</a>";
+
+ // A dot at the end of an URL is explicitly ignored
+ QTest::newRow("dotAtEnd") << "Look at this file: www.example.com/test.cpp."
+ << KTextToHTML::Options(KTextToHTML::PreserveSpaces)
+ << "Look at this file: <a href=\"http://www.example.com/test.cpp\">"
+ "www.example.com/test.cpp</a>.";
+
+ // Bug 313719 - URL in parenthesis
+ QTest::newRow("url-in-parenthesis-1") << "KDE (website https://www.kde.org)"
+ << KTextToHTML::Options(KTextToHTML::PreserveSpaces)
+ << "KDE (website <a href=\"https://www.kde.org\">https://www.kde.org</a>)";
+ QTest::newRow("url-in-parenthesis-2") << "KDE website (https://www.kde.org)"
+ << KTextToHTML::Options(KTextToHTML::PreserveSpaces)
+ << "KDE website (<a href=\"https://www.kde.org\">https://www.kde.org</a>)";
+ QTest::newRow("url-in-parenthesis-3") << "bla (https://www.kde.org - section 5.2)"
+ << KTextToHTML::Options(KTextToHTML::PreserveSpaces)
+ << "bla (<a href=\"https://www.kde.org\">https://www.kde.org</a> - section 5.2)";
+
+ // Fix url as foo <<url> <url>> when we concatened them.
+ QTest::newRow("url-with-url") << "foo <https://www.kde.org/ <https://www.kde.org/>>"
+ << KTextToHTML::Options(KTextToHTML::PreserveSpaces)
+ << "foo <<a href=\"https://www.kde.org/ \">https://www.kde.org/ </a><<a href=\"https://www.kde.org/\">https://www.kde.org/</a>>>";
+
+ //Fix url exploit
+ QTest::newRow("url-exec-html") << "https://\"><!--"
+ << KTextToHTML::Options(KTextToHTML::PreserveSpaces)
+ << "https://"><!--";
+
+ QTest::newRow("url-exec-html-2") << "https://192.168.1.1:\"><!--"
+ << KTextToHTML::Options(KTextToHTML::PreserveSpaces)
+ << "https://192.168.1.1:"><!--";
+
+ QTest::newRow("url-exec-html-3") << "https://<IP>:\"><!--"
+ << KTextToHTML::Options(KTextToHTML::PreserveSpaces)
+ << "https://<IP>:"><!--";
+
+ QTest::newRow("url-exec-html-4") << "https://<IP>:/\"><!--"
+ << KTextToHTML::Options(KTextToHTML::PreserveSpaces)
+ << "https://<IP>:/"><!--";
+
+ QTest::newRow("url-exec-html-5") << "https://<IP>:/\"><script>alert(1);</script><!--"
+ << KTextToHTML::Options(KTextToHTML::PreserveSpaces)
+ << "https://<IP>:/"><script>alert(1);</script><!--";
+
+ QTest::newRow("url-exec-html-6") << "https://<IP>:/\"><script>alert(1);</script><!--\nTest2"
+ << KTextToHTML::Options(KTextToHTML::PreserveSpaces)
+ << "https://<IP>:/"><script>alert(1);</script><!--\nTest2";
+
+
+ QTest::newRow("url-with-ref-in-[") << "https://www.kde.org[1]"
+ << KTextToHTML::Options(KTextToHTML::PreserveSpaces)
+ << "<a href=\"https://www.kde.org\">https://www.kde.org</a>[1]";
+
+ QTest::newRow("url-with-ref-in-[2") << "[http://www.example.org/][whatever]"
+ << KTextToHTML::Options(KTextToHTML::PreserveSpaces)
+ << "[<a href=\"http://www.example.org/\">http://www.example.org/</a>][whatever]";
+ //Bug 346132
+ QTest::newRow("url-with-ref-in-<") << "http://www.foo.bar<http://foo.bar/>"
+ << KTextToHTML::Options(KTextToHTML::PreserveSpaces)
+ << "<a href=\"http://www.foo.bar\">http://www.foo.bar</a><<a href=\"http://foo.bar/\">http://foo.bar/</a>>";
+
+ QTest::newRow("url-with-ref-in-]") << "[Please visit our booth 24-25 http://example.com/]"
+ << KTextToHTML::Options(KTextToHTML::PreserveSpaces)
+ << "[Please visit our booth 24-25 <a href=\"http://example.com/\">http://example.com/</a>]";
+
+ QTest::newRow("two url with space") << "http://www.kde.org/standards/kcfg/1.0 http://www.kde.org/"
+ << KTextToHTML::Options(KTextToHTML::PreserveSpaces)
+ << "<a href=\"http://www.kde.org/standards/kcfg/1.0\">http://www.kde.org/standards/kcfg/1.0</a> <a href=\"http://www.kde.org/\">http://www.kde.org/</a>";
+
+
+ //Bug kmail
+ QTest::newRow("two url with space-2") << "@@ -55,6 +55,10 @@ xsi:schemaLocation=\"http://www.kde.org/standards/kcfg/1.0 http://www.kde.org/"
+ << KTextToHTML::Options(KTextToHTML::PreserveSpaces)
+ << "@@ -55,6 +55,10 @@ xsi:schemaLocation="<a href=\"http://www.kde.org/standards/kcfg/1.0\">http://www.kde.org/standards/kcfg/1.0</a> <a href=\"http://www.kde.org/\">http://www.kde.org/</a>";
+
+}
+
+
+void KTextToHTMLTest::testHtmlConvert()
+{
+ QFETCH(QString, plainText);
+ QFETCH(KTextToHTML::Options, flags);
+ QFETCH(QString, htmlText);
+
+ QEXPECT_FAIL("punctation-bug", "Linklocator does not properly detect punctation as boundaries",
+ Continue);
+
+ QString actualHtml = KTextToHTML::convertToHtml(plainText, flags);
+ QCOMPARE(actualHtml, htmlText);
+}
+
+void KTextToHTMLTest::benchHtmlConvert_data()
+{
+ QTest::addColumn<QString>("text");
+ QTest::addColumn<KTextToHTML::Options>("options");
+
+ auto text = QString(QStringLiteral("foo bar asdf :)")).repeated(1000);
+ QTest::newRow("plain") << text << KTextToHTML::Options();
+ QTest::newRow("preserve-spaces") << text << KTextToHTML::Options(KTextToHTML::PreserveSpaces);
+ QTest::newRow("highlight-text") << text << KTextToHTML::Options(KTextToHTML::HighlightText);
+ QTest::newRow("replace-smileys") << text << KTextToHTML::Options(KTextToHTML::ReplaceSmileys);
+ QTest::newRow("preserve-spaces+highlight-text") << text << KTextToHTML::Options(KTextToHTML::PreserveSpaces | KTextToHTML::HighlightText);
+ QTest::newRow("preserve-spaces+highlight-text+replace-smileys") << text << KTextToHTML::Options(KTextToHTML::PreserveSpaces | KTextToHTML::HighlightText | KTextToHTML::ReplaceSmileys);
+}
+
+void KTextToHTMLTest::benchHtmlConvert()
+{
+ QFETCH(QString, text);
+ QFETCH(KTextToHTML::Options, options);
+
+ QBENCHMARK {
+ const QString html = KTextToHTML::convertToHtml(text, options);
+ Q_UNUSED(html);
+ }
+}
--- /dev/null
+/*
+ Copyright (c) 2007 Allen Winter <winter@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef KTEXTTOHTMLTEST_H
+#define KTEXTTOHTMLTEST_H
+
+#include <QObject>
+
+class KTextToHTMLTest : public QObject
+{
+ Q_OBJECT
+private Q_SLOTS:
+ void testGetEmailAddress();
+ void testGetUrl();
+ void testHtmlConvert();
+ void testHtmlConvert_data();
+
+ void benchHtmlConvert();
+ void benchHtmlConvert_data();
+
+private:
+ void testGetUrl2(const QString &left, const QString &right);
+};
+
+#endif
--- /dev/null
+/* This file is part of the KDE libraries
+ Copyright (c) 2005 David Faure <faure@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include "kurlmimedatatest.h"
+#include <QtTest>
+#include <QMimeData>
+#include <kurlmimedata.h>
+
+QTEST_MAIN(KUrlMimeDataTest)
+
+void KUrlMimeDataTest::testURLList()
+{
+ QMimeData *mimeData = new QMimeData();
+ QVERIFY(!mimeData->hasUrls());
+
+ QList<QUrl> urls;
+ urls.append(QUrl(QLatin1String("https://www.kde.org")));
+ urls.append(QUrl(QLatin1String("http://wstephenson:secret@example.com/path")));
+ urls.append(QUrl(QLatin1String("file:///home/dfaure/konqtests/Mat%C3%A9riel")));
+ QMap<QString, QString> metaData;
+ metaData[QLatin1String("key")] = QLatin1String("value");
+ metaData[QLatin1String("key2")] = QLatin1String("value2");
+
+ KUrlMimeData::setUrls(QList<QUrl>(), urls, mimeData);
+ KUrlMimeData::setMetaData(metaData, mimeData);
+
+ QVERIFY(mimeData->hasUrls());
+ QVERIFY(mimeData->hasText());
+
+ QMap<QString, QString> decodedMetaData;
+ QList<QUrl> decodedURLs = KUrlMimeData::urlsFromMimeData(mimeData, KUrlMimeData::PreferKdeUrls, &decodedMetaData);
+ QVERIFY(!decodedURLs.isEmpty());
+ QList<QUrl> expectedUrls = urls;
+ expectedUrls[1] = QUrl(QLatin1String("http://wstephenson:secret@example.com/path")); // password kept, unlike in KDE4, but that's okay, it's not displayed
+ QCOMPARE(expectedUrls, decodedURLs);
+
+ const QList<QUrl> qurls = mimeData->urls();
+ QCOMPARE(qurls.count(), urls.count());
+ for (int i = 0; i < qurls.count(); ++i) {
+ QCOMPARE(qurls[i], decodedURLs[i]);
+ }
+
+ QVERIFY(!decodedMetaData.isEmpty());
+ QCOMPARE(decodedMetaData[QLatin1String("key")], QString::fromLatin1("value"));
+ QCOMPARE(decodedMetaData[QLatin1String("key2")], QString::fromLatin1("value2"));
+
+ delete mimeData;
+}
+
+void KUrlMimeDataTest::testOneURL()
+{
+ QUrl oneURL(QLatin1String("file:///tmp"));
+ QList<QUrl> oneEltList;
+ oneEltList.append(oneURL);
+ QMimeData *mimeData = new QMimeData();
+
+ KUrlMimeData::setUrls(QList<QUrl>(), oneEltList, mimeData);
+ QVERIFY(mimeData->hasUrls());
+
+ QMap<QString, QString> decodedMetaData;
+ QList<QUrl> decodedURLs = KUrlMimeData::urlsFromMimeData(mimeData, KUrlMimeData::PreferKdeUrls, &decodedMetaData);
+ QVERIFY(!decodedURLs.isEmpty());
+ QCOMPARE(decodedURLs.count(), 1);
+ QCOMPARE(decodedURLs[0], oneURL);
+ QVERIFY(decodedMetaData.isEmpty());
+ delete mimeData;
+}
+
+void KUrlMimeDataTest::testFromQUrl()
+{
+ QList<QUrl> qurls;
+ qurls.append(QUrl(QLatin1String("https://www.kde.org")));
+ qurls.append(QUrl(QLatin1String("file:///home/dfaure/konqtests/Mat%C3%A9riel")));
+ QMimeData *mimeData = new QMimeData();
+ KUrlMimeData::setUrls(QList<QUrl>(), qurls, mimeData);
+ QVERIFY(mimeData->hasUrls());
+
+ QMap<QString, QString> decodedMetaData;
+ QList<QUrl> decodedURLs = KUrlMimeData::urlsFromMimeData(mimeData, KUrlMimeData::PreferKdeUrls, &decodedMetaData);
+ QVERIFY(!decodedURLs.isEmpty());
+ QCOMPARE(decodedURLs.count(), 2);
+ QCOMPARE(decodedURLs[0], qurls[0]);
+ QCOMPARE(decodedURLs[1], qurls[1]);
+ QVERIFY(decodedMetaData.isEmpty());
+ delete mimeData;
+}
+
+void KUrlMimeDataTest::testMostLocalUrlList_data()
+{
+ QTest::addColumn<bool>("withKdeUrls");
+ QTest::addColumn<bool>("withLocalUrls");
+ QTest::addColumn<bool>("expectedLocalUrls");
+
+ QTest::newRow("both") << true << true << false;
+ QTest::newRow("local_only") << false << true << true;
+ QTest::newRow("kde_only") << true << false << false;
+}
+
+void KUrlMimeDataTest::testMostLocalUrlList()
+{
+ QFETCH(bool, withKdeUrls);
+ QFETCH(bool, withLocalUrls);
+ QFETCH(bool, expectedLocalUrls);
+
+ QMimeData *mimeData = new QMimeData();
+ QList<QUrl> urls;
+ urls.append(QUrl(QLatin1String("desktop:/foo")));
+ urls.append(QUrl(QLatin1String("desktop:/bar")));
+ QList<QUrl> localUrls;
+ localUrls.append(QUrl(QLatin1String("file:/home/dfaure/Desktop/foo")));
+ localUrls.append(QUrl(QLatin1String("file:/home/dfaure/Desktop/bar")));
+
+ if (withKdeUrls && withLocalUrls) {
+ KUrlMimeData::setUrls(urls, localUrls, mimeData);
+ } else if (withKdeUrls) {
+ KUrlMimeData::setUrls(urls, {}, mimeData);
+ } else if (withLocalUrls) {
+ KUrlMimeData::setUrls({}, localUrls, mimeData);
+ }
+
+ QVERIFY(mimeData->hasUrls());
+ QVERIFY(mimeData->hasText());
+ // The support for urls is done in hasText, a direct call to hasFormat will say false.
+ //QVERIFY(mimeData->hasFormat(QLatin1String("text/plain")));
+
+ // urlsFromMimeData decodes the real "kde" urls by default, if any
+ QList<QUrl> decodedURLs = KUrlMimeData::urlsFromMimeData(mimeData);
+ QVERIFY(!decodedURLs.isEmpty());
+ if (expectedLocalUrls) {
+ QCOMPARE(decodedURLs, localUrls);
+ } else {
+ QCOMPARE(decodedURLs, urls);
+ }
+
+ // urlsFromMimeData can also be told to decode the "most local" urls
+ decodedURLs = KUrlMimeData::urlsFromMimeData(mimeData, KUrlMimeData::PreferLocalUrls);
+ QVERIFY(!decodedURLs.isEmpty());
+ if (withLocalUrls) {
+ QCOMPARE(decodedURLs, localUrls);
+ } else {
+ QCOMPARE(decodedURLs, urls);
+ }
+
+ // QMimeData decodes the "most local" urls
+ const QList<QUrl> qurls = mimeData->urls();
+ if (withLocalUrls) {
+ QCOMPARE(qurls.count(), localUrls.count());
+ for (int i = 0; i < qurls.count(); ++i) {
+ QCOMPARE(qurls[i], static_cast<QUrl>(localUrls[i]));
+ }
+ } else {
+ QCOMPARE(qurls.count(), 0);
+ }
+
+ delete mimeData;
+}
--- /dev/null
+/* This file is part of the KDE libraries
+ Copyright (c) 2005 David Faure <faure@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef KURLMIMEDATATEST_H
+#define KURLMIMEDATATEST_H
+
+#include <QObject>
+
+class KUrlMimeDataTest : public QObject
+{
+ Q_OBJECT
+private Q_SLOTS:
+ void testURLList();
+ void testOneURL();
+ void testFromQUrl();
+ void testMostLocalUrlList_data();
+ void testMostLocalUrlList();
+};
+
+#endif
--- /dev/null
+/*
+* Copyright (C) 2014 Alex Richardson <arichardson.kde@gmail.com>
+*
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU Library General Public
+* License as published by the Free Software Foundation; either
+* version 2 of the License, or (at your option) any later version.
+*
+* This library is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Library General Public License for more details.
+*
+* You should have received a copy of the GNU Library General Public License
+* along with this library; see the file COPYING.LIB. If not, write to
+* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+* Boston, MA 02110-1301, USA.
+*/
+#include <QTest>
+#include <QDebug>
+
+#include "kuser.h"
+
+namespace QTest
+{
+template<>
+char *toString(const KUserId &id)
+{
+ return qstrdup(id.toString().toLocal8Bit().data());
+}
+template<>
+char *toString(const KGroupId &id)
+{
+ return qstrdup(id.toString().toLocal8Bit().data());
+}
+}
+
+class KUserTest : public QObject
+{
+ Q_OBJECT
+private Q_SLOTS:
+ void testKUser();
+ void testKUserGroup();
+ void testKUserId();
+ void testKGroupId();
+};
+
+static inline void printUserInfo(KUser user)
+{
+ qDebug() << "Login name:" << user.loginName();
+ qDebug() << "Full name:" << user.property(KUser::FullName);
+ qDebug() << "User ID:" << user.userId().toString();
+ qDebug() << "Group ID:" << user.groupId().toString();
+ qDebug() << "Home dir:" << user.homeDir();
+ qDebug() << "Superuser:" << user.isSuperUser();
+ qDebug() << "Shell: " << user.shell();
+ qDebug() << "Face icon path:" << user.faceIconPath();
+ qDebug() << "Groups:" << user.groupNames();
+ qDebug();
+}
+
+void KUserTest::testKUser()
+{
+ KUser user(KUser::UseRealUserID);
+ KUser effectiveUser(KUser::UseRealUserID);
+ QVERIFY(user.isValid());
+ QVERIFY(effectiveUser.isValid());
+ QCOMPARE(user, effectiveUser); // should be the same, no suid
+ QVERIFY(user.groupId().isValid());
+ QCOMPARE(user.groupId(), KGroupId::currentGroupId());
+ QVERIFY(!user.groups().isEmpty()); // user must be in at least one group
+ QVERIFY(!user.groupNames().isEmpty()); // user must be in at least one group
+ QCOMPARE(user.groups().size(), user.groupNames().size());
+
+ QStringList allUserNames = KUser::allUserNames();
+ QList<KUser> allUsers = KUser::allUsers();
+ QVERIFY(!allUserNames.isEmpty());
+ QVERIFY(!allUsers.isEmpty());
+ QCOMPARE(allUsers.size(), allUserNames.size());
+ // check that the limiting works
+ QCOMPARE(user.groups(1).size(), 1);
+ QCOMPARE(user.groupNames(1).size(), 1);
+ qDebug() << "All users: " << allUserNames;
+ // check that the limiting works
+ QCOMPARE(KUser::allUserNames(1).size(), 1);
+ QCOMPARE(KUser::allUsers(1).size(), 1);
+ // We can't test the KUser properties, since they differ on each system
+ // instead just print them all out, this can be verified by the person running the test
+ printUserInfo(user);
+#if 0 //enable this if you think that KUser might not be working correctly
+ Q_FOREACH (const KUser &u, allUsers) {
+ printUserInfo(u);
+ }
+#endif
+
+ // test operator==
+ KUser invalidKUser = KUser(KUserId());
+ QVERIFY(invalidKUser != invalidKUser); //invalid never equal
+ QVERIFY(invalidKUser != user);
+ QVERIFY(user != invalidKUser); // now test the other way around
+ QCOMPARE(user, user);
+
+ // make sure we don't crash when accessing properties of an invalid instance
+ QCOMPARE(invalidKUser.faceIconPath(), QString());
+ QCOMPARE(invalidKUser.fullName(), QString());
+ QCOMPARE(invalidKUser.groupId(), KGroupId());
+ invalidKUser.groupNames(); // could be empty, or "nogroup", so no checks here
+ invalidKUser.groups(); // same as above
+ QCOMPARE(invalidKUser.homeDir(), QString());
+ QCOMPARE(invalidKUser.isSuperUser(), false);
+ QCOMPARE(invalidKUser.loginName(), QString());
+ QCOMPARE(invalidKUser.shell(), QString());
+ QCOMPARE(invalidKUser.userId(), KUserId());
+ QCOMPARE(invalidKUser.userId(), KUserId());
+ QCOMPARE(invalidKUser.property(KUser::RoomNumber), QVariant());
+}
+
+void KUserTest::testKUserGroup()
+{
+ KUserGroup group(KUser::UseRealUserID);
+ KUserGroup effectiveUser(KUser::UseEffectiveUID);
+ QVERIFY(group.isValid());
+ QVERIFY(effectiveUser.isValid());
+ QCOMPARE(group, effectiveUser); // should be the same, no suid
+#ifdef Q_OS_WIN
+ // on Windows the special group "None" has no members (often the only group that exists)
+ if (group.name() != QLatin1String("None")) {
+#else
+ {
+#endif
+ QStringList groupUserNames = group.userNames();
+ QList<KUser> groupUsers = group.users();
+ QVERIFY(!groupUsers.isEmpty()); // group must have at least one user (the current user)
+ QVERIFY(!groupUserNames.isEmpty()); // group must have at least one user (the current user)
+ QCOMPARE(groupUsers.size(), groupUserNames.size());
+ // check that the limiting works
+ QCOMPARE(group.users(1).size(), 1);
+ QCOMPARE(group.userNames(1).size(), 1);
+ }
+
+ QStringList allGroupNames = KUserGroup::allGroupNames();
+ QList<KUserGroup> allGroups = KUserGroup::allGroups();
+ QVERIFY(!allGroupNames.isEmpty());
+ QVERIFY(!allGroups.isEmpty());
+ QCOMPARE(allGroups.size(), allGroupNames.size());
+ qDebug() << "All groups: " << allGroupNames;
+ // check that the limiting works
+ QCOMPARE(KUserGroup::allGroupNames(1).size(), 1);
+ QCOMPARE(KUserGroup::allGroups(1).size(), 1);
+ // We can't test the KUser properties, since they differ on each system
+ // instead just print them all out, this can be verified by the person running the test
+ qDebug().nospace() << "Current group: " << group.name() << ", group ID =" << group.groupId().toString() << ", members = " << group.userNames();
+#if 0 //enable this if you think that KUser might not be working correctly
+ for (int i = 0; i < allGroups.size(); ++i) {
+ qDebug().nospace() << "Group " << i << ": name = " << allGroups[i].name()
+ << ", group ID =" << allGroups[i].groupId().toString();
+ qDebug() << allGroups[i].name() << "members:" << allGroups[i].userNames();
+ }
+#endif
+ // test operator==
+ KUserGroup invalidKUserGroup = KUserGroup(KGroupId());
+ QVERIFY(invalidKUserGroup != invalidKUserGroup); //invalid never equal
+ QVERIFY(invalidKUserGroup != group);
+ QVERIFY(group != invalidKUserGroup); // now test the other way around
+ QCOMPARE(group, group);
+
+ // make sure we don't crash when accessing an invalid KUserGroup
+ QCOMPARE(invalidKUserGroup.groupId(), KGroupId());
+ invalidKUserGroup.name(); // could be empty, or "nogroup", so no checks here
+ QCOMPARE(invalidKUserGroup.userNames(), QStringList());
+ QCOMPARE(invalidKUserGroup.users(), QList<KUser>());
+
+}
+
+void KUserTest::testKUserId()
+{
+ // make sure KUser::currentUserId() and KUser::curretEffectiveUserId() work
+ KUserId currentUser = KUserId::currentUserId();
+ QVERIFY(currentUser.isValid());
+ KUserId currentEffectiveUser = KUserId::currentEffectiveUserId();
+ QVERIFY(currentEffectiveUser.isValid());
+ // these should be the same since this is not a setuid program
+ QCOMPARE(currentUser, currentEffectiveUser);
+
+ KUser kuser(currentUser);
+ //now get the same user from his name
+ QString userName = kuser.loginName();
+ qDebug("Current user: %s, id: %s", qPrintable(userName), qPrintable(currentUser.toString()));
+ QVERIFY(!userName.isEmpty());
+ KUserId currentUserFromStr = KUserId::fromName(userName);
+ QVERIFY(currentUserFromStr.isValid());
+ KUserId currentUserCopyFromKUser = kuser.userId();
+ QVERIFY(currentUserCopyFromKUser.isValid());
+ KUserId invalid;
+ QVERIFY(!invalid.isValid());
+#ifdef Q_OS_WIN
+ KUserId invalid2(nullptr);
+#else
+ KUserId invalid2(-1);
+#endif
+ QVERIFY(!invalid2.isValid());
+ // I guess it is safe to assume no user with this name exists
+ KUserId invalid3 = KUserId::fromName(QStringLiteral("This_user_does_not_exist"));
+ QVERIFY(!invalid3.isValid());
+
+ //check comparison
+ QCOMPARE(invalid, KUserId());
+ QCOMPARE(invalid, invalid2);
+ QCOMPARE(invalid, invalid3);
+ QCOMPARE(currentUser, currentUserFromStr);
+ QCOMPARE(currentUser, currentEffectiveUser);
+ QCOMPARE(currentUser, currentUserCopyFromKUser);
+ QVERIFY(currentUser != invalid);
+ QVERIFY(currentUser != invalid2);
+ QVERIFY(currentUser != invalid3);
+ QVERIFY(invalid != currentUser);
+ //Copy constructor and assignment
+ KUserId currentUserCopy = currentUser;
+ QCOMPARE(currentUser, currentUserCopy);
+ QCOMPARE(currentUser, KUserId(currentUser));
+ QCOMPARE(currentEffectiveUser, KUserId(currentUser));
+}
+
+void KUserTest::testKGroupId()
+{
+ // make sure KGroup::currentGroupId() and KGroup::curretEffectiveGroupId() work
+ KGroupId currentGroup = KGroupId::currentGroupId();
+ QVERIFY(currentGroup.isValid());
+ KGroupId currentEffectiveGroup = KGroupId::currentEffectiveGroupId();
+ QVERIFY(currentEffectiveGroup.isValid());
+ // these should be the same since this is not a setuid program
+ QCOMPARE(currentGroup, currentEffectiveGroup);
+
+ //now get the same Group from his name
+ KUserGroup kuserGroup(currentGroup);
+ QString groupName = kuserGroup.name();
+ qDebug("Current group: %s, id: %s", qPrintable(groupName), qPrintable(currentGroup.toString()));
+ QVERIFY(!groupName.isEmpty());
+ KGroupId currentGroupFromStr = KGroupId::fromName(groupName);
+ QVERIFY(currentGroupFromStr.isValid());
+ KGroupId currentGroupCopyFromKUserGroup = kuserGroup.groupId();
+ QVERIFY(currentGroupCopyFromKUserGroup.isValid());
+ KGroupId invalid;
+ QVERIFY(!invalid.isValid());
+#ifdef Q_OS_WIN
+ KGroupId invalid2(nullptr);
+#else
+ KGroupId invalid2(-1);
+#endif
+ QVERIFY(!invalid2.isValid());
+ // I guess it is safe to assume no Group with this name exists
+ KGroupId invalid3 = KGroupId::fromName(QStringLiteral("This_Group_does_not_exist"));
+ QVERIFY(!invalid3.isValid());
+
+ //check comparison
+ QCOMPARE(invalid, KGroupId());
+ QCOMPARE(invalid, invalid2);
+ QCOMPARE(invalid, invalid3);
+ QCOMPARE(currentGroup, currentGroupFromStr);
+ QCOMPARE(currentGroup, currentEffectiveGroup);
+ QCOMPARE(currentGroup, currentGroupCopyFromKUserGroup);
+ QVERIFY(invalid != currentGroup);
+ QVERIFY(currentGroup != invalid);
+ QVERIFY(currentGroup != invalid2);
+ QVERIFY(currentGroup != invalid3);
+ //Copy constructor and assignment
+ KGroupId currentGroupCopy = currentGroup;
+ QCOMPARE(currentGroup, currentGroupCopy);
+ QCOMPARE(currentGroup, KGroupId(currentGroup));
+ QCOMPARE(currentEffectiveGroup, KGroupId(currentGroup));
+}
+
+QTEST_MAIN(KUserTest)
+
+#include "kusertest.moc"
--- /dev/null
+/*
+ * Copyright 2013 Sebastian Kügler <sebas@kde.org>
+ * Copyright 2014 Alex Merry <alexmerry@kde.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License or (at your option) version 3 or any later version
+ * accepted by the membership of KDE e.V. (or its successor approved
+ * by the membership of KDE e.V.), which shall act as a proxy
+ * defined in Section 14 of version 3 of the license.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "multiplugin.h"
+#include <kexportplugin.h>
+#include <kpluginfactory.h>
+#include <QDebug>
+
+MultiPlugin1::MultiPlugin1(QObject *parent, const QVariantList &args)
+ : QObject(parent)
+{
+ qDebug() << "MultiPlugin1" << args;
+ setObjectName(QLatin1String("MultiPlugin1"));
+}
+
+MultiPlugin2::MultiPlugin2(QObject *parent, const QVariantList &args)
+ : QObject(parent)
+{
+ qDebug() << "MultiPlugin2" << args;
+ setObjectName(QLatin1String("MultiPlugin2"));
+}
+
+K_PLUGIN_FACTORY(MultiPluginFactory,
+ registerPlugin<MultiPlugin1>();
+ registerPlugin<MultiPlugin2>(QLatin1String("secondary"));
+ )
+
+#include "multiplugin.moc"
--- /dev/null
+/*
+ * Copyright 2013 Sebastian Kügler <sebas@kde.org>
+ * Copyright 2014 Alex Merry <alexmerry@kde.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License or (at your option) version 3 or any later version
+ * accepted by the membership of KDE e.V. (or its successor approved
+ * by the membership of KDE e.V.), which shall act as a proxy
+ * defined in Section 14 of version 3 of the license.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#ifndef MULTIPLUGIN_H
+#define MULTIPLUGIN_H
+
+#include <QObject>
+
+class MultiPlugin1 : public QObject
+{
+ Q_OBJECT
+
+public:
+ MultiPlugin1(QObject *parent, const QVariantList &args);
+};
+
+class MultiPlugin2 : public QObject
+{
+ Q_OBJECT
+
+public:
+ MultiPlugin2(QObject *parent, const QVariantList &args);
+};
+
+#endif // MULTIPLUGIN_H
--- /dev/null
+#!/usr/bin/env python
+#-*- coding: utf-8 -*-
+
+from __future__ import print_function
+
+import sys
+
+sys.path.append(sys.argv[1])
+
+from PyQt5 import QtCore
+from PyQt5 import QtWidgets
+
+from PyKF5 import KCoreAddons
+
+def main():
+ app = QtWidgets.QApplication(sys.argv)
+
+ assert(KCoreAddons.KStringHandler.capwords("the quick brown fox jumped over the lazy dog") == "The Quick Brown Fox Jumped Over The Lazy Dog")
+
+if __name__ == '__main__':
+ sys.exit(main())
--- /dev/null
+/*
+ * Copyright 2013 Sebastian Kügler <sebas@kde.org>
+ * Copyright 2014 Alex Merry <alexmerry@kde.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License or (at your option) version 3 or any later version
+ * accepted by the membership of KDE e.V. (or its successor approved
+ * by the membership of KDE e.V.), which shall act as a proxy
+ * defined in Section 14 of version 3 of the license.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "unversionedplugin.h"
+#include <kexportplugin.h>
+#include <kpluginfactory.h>
+#include <QDebug>
+
+UnversionedPlugin::UnversionedPlugin(QObject *parent, const QVariantList &args)
+ : QObject(parent)
+{
+ qDebug() << "Created UnversionedPlugin with args" << args;
+}
+
+K_PLUGIN_FACTORY(UnversionedPluginFactory, registerPlugin<UnversionedPlugin>();)
+
+#include "unversionedplugin.moc"
--- /dev/null
+/*
+ * Copyright 2013 Sebastian Kügler <sebas@kde.org>
+ * Copyright 2014 Alex Merry <alexmerry@kde.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License or (at your option) version 3 or any later version
+ * accepted by the membership of KDE e.V. (or its successor approved
+ * by the membership of KDE e.V.), which shall act as a proxy
+ * defined in Section 14 of version 3 of the license.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#ifndef UNVERSIONEDPLUGIN_H
+#define UNVERSIONEDPLUGIN_H
+
+#include <QObject>
+
+class UnversionedPlugin : public QObject
+{
+ Q_OBJECT
+
+public:
+ UnversionedPlugin(QObject *parent, const QVariantList &args);
+};
+
+#endif // UNVERSIONEDPLUGIN_H
--- /dev/null
+/*
+ * Copyright 2013 Sebastian Kügler <sebas@kde.org>
+ * Copyright 2014 Alex Merry <alexmerry@kde.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License or (at your option) version 3 or any later version
+ * accepted by the membership of KDE e.V. (or its successor approved
+ * by the membership of KDE e.V.), which shall act as a proxy
+ * defined in Section 14 of version 3 of the license.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "versionedplugin.h"
+#include <kexportplugin.h>
+#include <kpluginfactory.h>
+#include <QDebug>
+
+VersionedPlugin::VersionedPlugin(QObject *parent, const QVariantList &args)
+ : QObject(parent)
+{
+ qDebug() << "Created VersionedPlugin with args" << args;
+}
+
+K_PLUGIN_FACTORY(VersionedPluginFactory, registerPlugin<VersionedPlugin>();)
+K_EXPORT_PLUGIN_VERSION(5)
+
+#include "versionedplugin.moc"
--- /dev/null
+/*
+ * Copyright 2013 Sebastian Kügler <sebas@kde.org>
+ * Copyright 2014 Alex Merry <alexmerry@kde.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License or (at your option) version 3 or any later version
+ * accepted by the membership of KDE e.V. (or its successor approved
+ * by the membership of KDE e.V.), which shall act as a proxy
+ * defined in Section 14 of version 3 of the license.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#ifndef VERSIONEDPLUGIN_H
+#define VERSIONEDPLUGIN_H
+
+#include <QObject>
+
+class VersionedPlugin : public QObject
+{
+ Q_OBJECT
+
+public:
+ VersionedPlugin(QObject *parent, const QVariantList &args);
+};
+
+#endif // VERSIONEDPLUGIN_H
--- /dev/null
+# - Try to find the FAM directory notification library
+# Once done this will define
+#
+# FAM_FOUND - system has FAM
+# FAM_INCLUDE_DIR - the FAM include directory
+# FAM_LIBRARIES - The libraries needed to use FAM
+
+# Copyright (c) 2006, Alexander Neundorf, <neundorf@kde.org>
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# 3. Neither the name of the University nor the names of its contributors
+# may be used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+
+
+FIND_PATH(FAM_INCLUDE_DIR fam.h)
+
+FIND_LIBRARY(FAM_LIBRARIES NAMES fam )
+
+INCLUDE(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(FAM DEFAULT_MSG FAM_INCLUDE_DIR FAM_LIBRARIES )
+
+set_package_properties(FAM PROPERTIES
+ URL "http://oss.sgi.com/projects/fam"
+ DESCRIPTION "File alteration notification support via a separate service"
+)
+
+MARK_AS_ADVANCED(FAM_INCLUDE_DIR FAM_LIBRARIES)
+
--- /dev/null
+#
+# Copyright 2016 by Shaheed Haque (srhaque@theiet.org)
+# Copyright 2016 Stephen Kelly <steveire@gmail.com>
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+# derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+import os, sys
+
+import rules_engine
+sys.path.append(os.path.dirname(os.path.dirname(rules_engine.__file__)))
+import Qt5Ruleset
+
+from clang.cindex import AccessSpecifier
+
+def discard_base(container, sip, matcher):
+ sip["base_specifiers"] = []
+
+def local_container_rules():
+ return [
+ [".*", "KUserId", ".*", ".*", ".*", discard_base],
+ [".*", "KGroupId", ".*", ".*", ".*", discard_base]
+ ]
+
+def local_forward_declaration_rules():
+ return [
+ # [".*", "QWidget", ".*", rules_engine.mark_forward_declaration_external]
+ ]
+
+def local_function_rules():
+ return [
+
+ ["KUser", "KUser", ".*", ".*", ".*passwd.*", rules_engine.function_discard],
+ ["KUserGroup", "KUserGroup", ".*", ".*", ".*group.*", rules_engine.function_discard],
+
+ ["KCrash", "defaultCrashHandler", ".*", ".*", ".*", rules_engine.function_discard],
+
+ ["KPluginFactory", "create", ".*", ".*", ".*QWidget.*", rules_engine.function_discard],
+
+ # Deprecated
+ ["KPluginFactory", "createPartObject", ".*", ".*", ".*", rules_engine.function_discard],
+
+ # Multiple overloads with same python signature
+ ["KMacroExpanderBase", "expandMacrosShellQuote", ".*", ".*", ".*int.*", rules_engine.function_discard],
+ ["KRandomSequence", "setSeed", ".*", ".*", "int.*", rules_engine.function_discard],
+
+ [".*", "qobject_cast", ".*", ".*", ".*", rules_engine.function_discard],
+ [".*", "qobject_interface_iid", ".*", ".*", ".*", rules_engine.function_discard],
+ ]
+
+def rewrite_typedef_as_unsigned_int(container, typedef, sip, matcher):
+ sip["decl"] = "unsigned int"
+
+def local_typedef_rules():
+ return [
+ ["KPluginFactory", "CreateInstanceFunction", rules_engine.typedef_discard],
+ [".*", "K_GID", rewrite_typedef_as_unsigned_int],
+ [".*", "K_UID", rewrite_typedef_as_unsigned_int],
+ ]
+
+class RuleSet(Qt5Ruleset.RuleSet):
+ def __init__(self):
+ Qt5Ruleset.RuleSet.__init__(self)
+ self._forward_declaration_db = rules_engine.ForwardDeclarationRuleDb(lambda: local_forward_declaration_rules() + Qt5Ruleset.forward_declaration_rules())
+ self._fn_db = rules_engine.FunctionRuleDb(lambda: local_function_rules() + Qt5Ruleset.function_rules())
+ self._container_db = rules_engine.ContainerRuleDb(lambda: local_container_rules() + Qt5Ruleset.container_rules())
+ self._typedef_db = rules_engine.TypedefRuleDb(lambda: local_typedef_rules() + Qt5Ruleset.typedef_rules())
--- /dev/null
+kf5.kcoreaddons.kdirwatch KDirWatch (KCoreAddons) DEFAULT_SEVERITY [WARNING] IDENTIFIER [KDIRWATCH]
+kf5.kcoreaddons.kaboutdata KAboutData (KCoreAddons) IDENTIFIER [KABOUTDATA]
+kf5.kcoreaddons.desktopparser DesktopParser (KCoreAddons) DEFAULT_SEVERITY [WARNING] IDENTIFIER [DESKTOPPARSER]
+kf5.kcoreaddons.kdelibs4configmigrator Kdelibs4ConfigMigrator (KCoreAddons) DEFAULT_SEVERITY [WARNING] IDENTIFIER [MIGRATOR]
+org.kde.kcoreaddons kcoreaddons (kcoreaddons lib) IDENTIFIER [KCOREADDONS_DEBUG]
+
--- /dev/null
+maintainer: mpyne
+description: Addons to QtCore
+tier: 1
+type: functional
+platforms:
+ - name: Linux
+ - name: FreeBSD
+ - name: Windows
+ - name: MacOSX
+ - name: Android
+portingAid: false
+deprecated: false
+release: true
+libraries:
+ - qmake: KCoreAddons
+ cmake: "KF5::CoreAddons"
+cmakename: KF5CoreAddons
+
+public_lib: true
+group: Frameworks
+subgroup: Tier 1
--- /dev/null
+# UTF-8 test:äëïöü
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4 stable\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2006-01-12 16:33+0200\n"
+"Last-Translator: JUANITA FRANZ <JUANITA.FRANZ@VR-WEB.DE>\n"
+"Language-Team: AFRIKAANS <translate-discuss-af@lists.sourceforge.net>\n"
+"Language: af\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Geen lisensiëring terme vir hierdie program is gespesifiseer nie.\n"
+"Gaan asseblief die dokumentasie en bron kode na vir enige\n"
+"lisensiëring terme.\n"
+
+#: lib/kaboutdata.cpp:306
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Hierdie program word versprei onder die terme van die %1."
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgid "GPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:356
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:360
+#, fuzzy
+#| msgid "License:"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Lisensie:"
+
+#: lib/kaboutdata.cpp:361
+#, fuzzy
+#| msgid "License:"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Lisensie:"
+
+#: lib/kaboutdata.cpp:364
+#, fuzzy
+#| msgid "Public Key"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Publiek Sleutel"
+
+#: lib/kaboutdata.cpp:365
+#, fuzzy
+#| msgid "Public Key"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Publiek Sleutel"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr ""
+
+#: lib/kaboutdata.cpp:369
+#, fuzzy
+#| msgid "Public Key"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Publiek Sleutel"
+
+#: lib/kaboutdata.cpp:372
+#, fuzzy
+#| msgid "GPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:376
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:381
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr ""
+
+#: lib/kaboutdata.cpp:385
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Pasmaak"
+
+#: lib/kaboutdata.cpp:388
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Geen verskaffer gekies."
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE is in baie tale beskikbaar. Besoek http://i18n.kde.org vir "
+"internasionale tale en algemene statistiek i.v.m. KDE. vertaling. Vir Suid-"
+"Afrikaanse tale kan http://kde.af.org.za en http://www.translate.org.za "
+"besoek word.</p>"
+
+#: lib/kaboutdata.cpp:1165
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Vertoon outeur informasie"
+
+#: lib/kaboutdata.cpp:1166
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Vertoon lisensie informasie"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+#, fuzzy
+#| msgid "Vietnamese"
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "Vietnamese"
+
+#: lib/kaboutdata.cpp:1178
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Hierdie program was geskryf deur iemand wat anoniem wil bly."
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 was geskryf deur\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Gebruik asseblief http://bugs.kde.org om foute te raporteer.\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Gebruik asseblief %1 .\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer an %2 function."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Die biblioteek: '%1' bevat nie die funksie '%2' nie."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "vm"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "nm"
+
+#: lib/util/kformatprivate.cpp:121
+#, fuzzy
+#| msgid "On"
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "Aan"
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "vm"
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Ok"
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "Goed"
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Kha"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Verander"
+
+#: lib/util/kformatprivate.cpp:127
+#, fuzzy
+#| msgid "G:"
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G:"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tir"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Redigeer"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+#, fuzzy
+#| msgctxt "QFont"
+#| msgid "Yi"
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:132
+#, fuzzy
+#| msgctxt "QFont"
+#| msgid "Yi"
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Stuur in"
+
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy
+#| msgid "B:"
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B:"
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "vm"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 %2"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, fuzzy, qt-format
+#| msgid "Monday"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "Maandag"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 opsies"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 opsies"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 opsies"
+msgstr[1] "%1 opsies"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgid "Monday"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "Maandag"
+msgstr[1] "Maandag"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] ""
+msgstr[1] ""
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 opsies"
+msgstr[1] "%1 opsies"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 opsies"
+msgstr[1] "%1 opsies"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 %2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "ongeldige vlaggies"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+#| msgid "Monday"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Maandag"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Dinsdag"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Volgende maand"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "Dinsdag"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Woensdag"
+
+#: lib/util/kformatprivate.cpp:535
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "Donderdag"
+
+#: lib/util/kformatprivate.cpp:537
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "Vrydag"
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "Saterdag"
+
+#: lib/util/kformatprivate.cpp:541
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "Sondag"
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Volgende maand"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Dinsdag"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Woensdag"
+
+#: lib/util/kformatprivate.cpp:552
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "Donderdag"
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Vrydag"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Saterdag"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Sondag"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1 %2"
--- /dev/null
+# Safa Alfulaij <safa1996alfulaij@gmail.com>, 2014, 2017, 2018.
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-06-28 15:38+0300\n"
+"PO-Revision-Date: 2018-06-08 23:48+0300\n"
+"Last-Translator: Safa Alfulaij <safa1996alfulaij@gmail.com>\n"
+"Language-Team: Arabic <doc@arabeyes.org>\n"
+"Language: ar\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
+"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
+"X-Generator: Lokalize 2.0\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"لم تُحدّد شروط ترخيص لهذا البرنامج.\n"
+"رجاءً تحقّق من التوثيق أو أي مصدر\n"
+"لأي شروط ترخيص.\n"
+
+#: lib/kaboutdata.cpp:306
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "يُوزّع هذا البرنامج تحت شروط %1."
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "رخصة غنو العمومية إصدارة ٢"
+
+#: lib/kaboutdata.cpp:356
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "رخصة غنو العمومية الصغرى إصدارة ٢"
+
+#: lib/kaboutdata.cpp:360
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "رخصة بيإسدي"
+
+#: lib/kaboutdata.cpp:361
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "رخصة بيإسدي"
+
+#: lib/kaboutdata.cpp:364
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "رخصة فنية"
+
+#: lib/kaboutdata.cpp:365
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "رخصة فنية"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "رخصة كيوت العمومية"
+
+#: lib/kaboutdata.cpp:372
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "رخصة غنو العمومية إصدارة ٣"
+
+#: lib/kaboutdata.cpp:376
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "رخصة غنو العمومية الصغرى إصدارة ٣"
+
+#: lib/kaboutdata.cpp:380
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:381
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "رخصة غنو العمومية الصغرى إصدارة ٢٫١"
+
+#: lib/kaboutdata.cpp:385
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "مخصصة"
+
+#: lib/kaboutdata.cpp:388
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "لم تُحدّد"
+
+#: lib/kaboutdata.cpp:937
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>يعمل أفراد طاقم عربآيز على ترجمة واجهة كدي إلى اللغة العربية، وهذا بفضل "
+"جهود مترجمين متطوّعين من كافة الدول العربية وغيرها.</p>\n"
+"<p>لمزيد من المعلومات عن ترجمة كدي إلى العربةي، زُر <a href=\"https://www."
+"arabeyes.org\">الموقع الرسمي للفريق</a>. رجاءً أبلغ عن أخطاء الترجمة على "
+"العنوان الآتي: <a href=\"mailto:contact@arabeyes.org\">contact@arabeyes.org</"
+"a></p>\n"
+"<p>تُترجم كدي إلى لغات عديدة بفضل مختلف طواقم الترجمة من العالم بأسره.</p>\n"
+"<p>لمزيد من المعلومات زُر <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a>.</p>"
+
+#: lib/kaboutdata.cpp:1165
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "اعرض معلومات المؤلف."
+
+#: lib/kaboutdata.cpp:1166
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "اعرض معلومات الرخصة."
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "اسم ملف الأساس لمدخلة سطح المكتب لهذا التطبيق."
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "اسم الملف"
+
+#: lib/kaboutdata.cpp:1178
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "كتب أحد الأشخاص هذا التطبيق، وهو يفضّل أن يبقى مجهولًا."
+
+#: lib/kaboutdata.cpp:1180
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "كتب %1:"
+
+#: lib/kaboutdata.cpp:1191
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "رجاءً استخدم https://bugs.kde.org للإبلاغ عن العلل."
+
+#: lib/kaboutdata.cpp:1193
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "رجاءً أبلغ عن العلل إلى %1."
+
+#: lib/plugin/kpluginloader.cpp:122
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "المكتبة %1 لا تُوفّر KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr ""
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr ""
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 بايت"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 ك.بايت"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 م.ب"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 غ.بايت"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 ت.بايت"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 ب.بايت"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 إ.بايت"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ز.بايت"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 ي.بايت"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 بايت"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 ك.بايت"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 م.ب"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 غ.بايت"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 ت.بايت"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 ب.بايت"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 إ.بايت"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ز.بايت"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 ي.بايت"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 بايت"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 ك.بايت"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 م.بايت"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 غ.بايت"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 ت.بايت"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 ب.بايت"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 إ.بايت"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ز.بايت"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 ي.بايت"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1دق%2.%3ث"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1دق%2ث"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1سا%2دق"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1سا%2دق%3.%4ث"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1سا%2دق%3ث"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 يوم"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 ساعة"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 دقيقة"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 ثانية"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "أقل من مليثانية"
+msgstr[1] "مليثانية واحدة"
+msgstr[2] "مليثانيتين"
+msgstr[3] "%n مليثوان"
+msgstr[4] "%n مليثانية"
+msgstr[5] "%n مليثانية"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "أقلّ من يوم"
+msgstr[1] "يوم واحد"
+msgstr[2] "يومان"
+msgstr[3] "%n أيام"
+msgstr[4] "%n يومًا"
+msgstr[5] "%n يوم"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "أقل من ساعة"
+msgstr[1] "ساعة واحدة"
+msgstr[2] "ساعتان"
+msgstr[3] "%n ساعات"
+msgstr[4] "%n ساعة"
+msgstr[5] "%n ساعة"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "أقل من دقيقة"
+msgstr[1] "دقيقة واحدة"
+msgstr[2] "دقيقتان"
+msgstr[3] "%n دقائق"
+msgstr[4] "%n دقيقة"
+msgstr[5] "%n دقيقة"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "أقل من ثانية"
+msgstr[1] "ثانية واحدة"
+msgstr[2] "ثانيتان"
+msgstr[3] "%n ثوان"
+msgstr[4] "%n ثانية"
+msgstr[5] "%n ثانية"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 و%2"
+
+#: lib/util/kformatprivate.cpp:509
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "تاريخ غير صالح"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "الغد"
+
+#: lib/util/kformatprivate.cpp:521
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "اليوم"
+
+#: lib/util/kformatprivate.cpp:523
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "الغد"
+
+#: lib/util/kformatprivate.cpp:529
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "الإثنين الفائت"
+
+#: lib/util/kformatprivate.cpp:531
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "الثلاثاء الفائت"
+
+#: lib/util/kformatprivate.cpp:533
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "الأربعاء الفائت"
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "الخميس الفائت"
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "الجمعة الفائتة"
+
+#: lib/util/kformatprivate.cpp:539
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "السبت الفائت"
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "الأحد الفائت"
+
+#: lib/util/kformatprivate.cpp:546
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "الإثنين القادم"
+
+#: lib/util/kformatprivate.cpp:548
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "الثلاثاء القادم"
+
+#: lib/util/kformatprivate.cpp:550
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "الأربعاء القادم"
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "الخميس القادم"
+
+#: lib/util/kformatprivate.cpp:554
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "الجمعة القادمة"
+
+#: lib/util/kformatprivate.cpp:556
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "السبت القادم"
+
+#: lib/util/kformatprivate.cpp:558
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "الأحد القادم"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1، %2"
--- /dev/null
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Amitakhya Phukan <aphukan@fedoraproject.org>, 2008.
+# Amitakhya Phukan <অমিতাক্ষ ফুকন>, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4_as\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2008-12-26 15:19+0530\n"
+"Last-Translator: Amitakhya Phukan <অমিতাক্ষ ফুকন>\n"
+"Language-Team: Assamese <fedora-trans-as@redhat.com>\n"
+"Language: as\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Lokalize 0.2\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"এই প্ৰোগ্ৰামৰ বাবে কোনো প্ৰমাণপত্ৰ নিৰ্ধাৰণ কৰা নহয় ।\n"
+"অনুগ্ৰহ কৰি, প্ৰমাণপত্ৰ সংক্ৰান্ত কোনো তথ্যৰ বাবে প্ৰোগ্ৰামৰ সৈতে প্ৰাপ্ত নথিপত্ৰ বা মূল "
+"উৎস পৰীক্ষা কৰক ।\n"
+
+#: lib/kaboutdata.cpp:306
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "%1 ৰ শৰ্তাধীন এই প্ৰোগ্ৰাম বিতৰণ কৰা হৈছে ।"
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License Version 2"
+
+#: lib/kaboutdata.cpp:356
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:360
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD License"
+
+#: lib/kaboutdata.cpp:361
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD License"
+
+#: lib/kaboutdata.cpp:364
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "শিল্পকাৰ্য্য সংক্ৰান্ত প্ৰমাণপত্ৰ"
+
+#: lib/kaboutdata.cpp:365
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "শিল্পকাৰ্য্য সংক্ৰান্ত প্ৰমাণপত্ৰ"
+
+#: lib/kaboutdata.cpp:368
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public License"
+
+#: lib/kaboutdata.cpp:372
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License Version 3"
+
+#: lib/kaboutdata.cpp:376
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License Version 3"
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:381
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:385
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "স্বনিৰ্ধাৰিত"
+
+#: lib/kaboutdata.cpp:388
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "উল্লেখিত নহয়"
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>বিশ্বব্যাপী বিভিন্ন অনুবাদক দলৰ অৱিৰত প্ৰয়াসত বিশ্বৰ বিভিন্ন ভাষাত KDE অনুবাদ কৰা "
+"হৈছে ।</p><p>KDE ৰ আন্তৰ্জাতীয়কৰণৰ সম্বন্ধে অধিক জনাৰ বাবে <a href=\"http://l10n."
+"kde.org\">http://l10n.kde.org</a></p> চাওক ।"
+
+#: lib/kaboutdata.cpp:1165
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "লেখকৰ তথ্য প্ৰদৰ্শন কৰা হ'ব"
+
+#: lib/kaboutdata.cpp:1166
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "প্ৰমাণপত্ৰ সংক্ৰান্ত তথ্য প্ৰদৰ্শন কৰা হয়"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1178
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "এই অনুপ্ৰয়োগৰ নিৰ্মাতা অজ্ঞাত থাকিব ইচ্ছুক ।"
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 লিখা হৈছে\n"
+"%2 ৰ দ্বাৰা"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "অনুগ্ৰহ কৰি http://bugs.kde.org ত বাগ প্ৰতিবেদন কৰক ।\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "অনুগ্ৰহ কৰি %1 লৈ বাগ প্ৰতিবেদন কৰক ।\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "%1 লাইব্ৰেৰি দ্বাৰা, KDE 4 ৰ সৈতে সুসংগত কলঘৰ উপলব্ধ কৰা নহয় ।"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "pm"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Kha"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "May"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tir"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "সম্পাদনা"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "জমা কৰক"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MiB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GiB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TiB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, fuzzy, qt-format
+#| msgid "%1 KiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KiB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MiB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GiB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TiB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, fuzzy, qt-format
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 TiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, fuzzy, qt-format
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 days"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, fuzzy, qt-format
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 hours"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minutes"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, fuzzy, qt-format
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 seconds"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgid "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 milliseconds"
+msgstr[1] "%1 milliseconds"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 days"
+msgstr[1] "%1 days"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 hours"
+msgstr[1] "%1 hours"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 minutes"
+msgstr[1] "%1 minutes"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 seconds"
+msgstr[1] "%1 seconds"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 আৰু %2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+#| msgctxt "@item Calendar system"
+#| msgid "Invalid Calendar Type"
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "অবৈধ পঞ্জিকাৰ ধৰণ"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "আজি"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "যোৱা কালি"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "পৰবৰ্তী মাহ"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "Tuesday"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Wednesday"
+
+#: lib/util/kformatprivate.cpp:535
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "Thursday"
+
+#: lib/util/kformatprivate.cpp:537
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "Friday"
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "Saturday"
+
+#: lib/util/kformatprivate.cpp:541
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "Sunday"
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "পৰবৰ্তী মাহ"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Tuesday"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Wednesday"
+
+#: lib/util/kformatprivate.cpp:552
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "Thursday"
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Friday"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Saturday"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Sunday"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1 %2"
--- /dev/null
+# translation of kdelibs4.po to Belarusian
+# translation of kdelibs4.po to
+#
+# Eugene Zelenko <greendeath@mail.ru>, 2002-2004.
+# Ihar Hrachyshka <ihar.hrachyshka@gmail.com>, 2006.
+# Darafei Praliaskouski <komzpa@licei2.com>, 2007.
+# Komяpa <symbol@me.by>, 2007.
+# Komяpa <komzpa@gmail.com>, 2007.
+# Darafei Praliaskoski <komzpa@gmail.com>, 2007.
+# Darafei Praliaskouski <komzpa@gmail.com>, 2008, 2009.
+# Siarhei Liantsevich <serzh.by@gmail.com>, 2008.
+# kom <me@komzpa.net>, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2009-09-06 15:21+0300\n"
+"Last-Translator: Darafei Praliaskouski <komzpa@gmail.com>\n"
+"Language-Team: Belarusian <i18n@mova.org>\n"
+"Language: be\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.0\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Для гэтай праграмы не былі вызначаныя ліцэнзійныя ўмовы.\n"
+"Калі ласка, праглядзіце дакументацыю ці крынічны код праграмы на прадмет "
+"ліцэнзійных умоваў.\n"
+
+#: lib/kaboutdata.cpp:306
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Гэтая праграма распаўсюджваецца на ўмовах %1."
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgid "GPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL"
+
+#: lib/kaboutdata.cpp:353
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License Version 2"
+
+#: lib/kaboutdata.cpp:356
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:357
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU General Public License Version 2"
+
+#: lib/kaboutdata.cpp:360
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Ліцэнзія BSD"
+
+#: lib/kaboutdata.cpp:361
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Ліцэнзія BSD"
+
+#: lib/kaboutdata.cpp:364
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artistic License"
+
+#: lib/kaboutdata.cpp:365
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artistic License"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr ""
+
+#: lib/kaboutdata.cpp:369
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public License"
+
+#: lib/kaboutdata.cpp:372
+#, fuzzy
+#| msgid "GPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL"
+
+#: lib/kaboutdata.cpp:373
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License Version 2"
+
+#: lib/kaboutdata.cpp:376
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:377
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU General Public License Version 2"
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:381
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU General Public License Version 2"
+
+#: lib/kaboutdata.cpp:385
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Асаблівая"
+
+#: lib/kaboutdata.cpp:388
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Не вызначана"
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE перакладзенае на шмат моваў свету дзякуючы працы вольных "
+"перакладчыкаў.</p><p>Каб атрымаць падрабязную інфармацыю аб перакладзе KDE, "
+"наведайце <a href=\"http://l10n.kde.org\">http://l10n.kde.org</a>. Пра "
+"пераклад на беларускую мову вы можаце даведацца на <a href=\"http://i18n."
+"linux.by\">http://i18n.linux.by</a></p>"
+
+#: lib/kaboutdata.cpp:1165
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Паказаць звесткі пра стваральніка"
+
+#: lib/kaboutdata.cpp:1166
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Паказаць звесткі пра ліцэнзію"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+#, fuzzy
+#| msgid "Filename Error"
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "Памылка назвы файла"
+
+#: lib/kaboutdata.cpp:1178
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Гэтая праграма створаная чалавекам, які захацеў застацца невядомым."
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 напісана\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Калі ласка, паведамляйце пра памылкі на http://bugs.kde.org.\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Калі ласка, паведамляйце пра памылкі %1.\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Бібліятэка %1 не прапаноўвае cумяшчальную з KDE 4 фабрыку."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "pm"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Kha"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Тра"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tir"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Змяніць"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Перадаць"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 б"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 б"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 МіБ"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 ГіБ"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TiБ"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 б"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 б"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 б"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 б"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 б"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, fuzzy, qt-format
+#| msgid "%1 KiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 КіБ"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 МіБ"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 ГіБ"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TiБ"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 б"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 б"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 б"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 б"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 б"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, fuzzy, qt-format
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 КіБ"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 МіБ"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 ГіБ"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiБ"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 TiБ"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 TiБ"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 TiБ"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 TiБ"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, fuzzy, qt-format
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 дзён"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, fuzzy, qt-format
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 гадзін"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 хвілін"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, fuzzy, qt-format
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 сенунд"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgid "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 мілісекунд"
+msgstr[1] "%1 мілісекунд"
+msgstr[2] "%1 мілісекунд"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 дзён"
+msgstr[1] "%1 дзён"
+msgstr[2] "%1 дзён"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 гадзін"
+msgstr[1] "%1 гадзін"
+msgstr[2] "%1 гадзін"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 хвілін"
+msgstr[1] "%1 хвілін"
+msgstr[2] "%1 хвілін"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 сенунд"
+msgstr[1] "%1 сенунд"
+msgstr[2] "%1 сенунд"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "І"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Недапушчальныя назвы файлаў"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Сёння"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Учора"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Наступны месяц"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "Аўторак"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Серада"
+
+#: lib/util/kformatprivate.cpp:535
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "Чацвер"
+
+#: lib/util/kformatprivate.cpp:537
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "Пятніца"
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "Субота"
+
+#: lib/util/kformatprivate.cpp:541
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "Нядзеля"
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Наступны месяц"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Аўторак"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Серада"
+
+#: lib/util/kformatprivate.cpp:552
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "Чацвер"
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Пятніца"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Субота"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Нядзеля"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1 %2"
--- /dev/null
+# translation of kdelibs4.po to Belarusian Latin
+# Copyright (C) 2008 This_file_is_part_of_KDE
+# This file is distributed under the same license as the kdelibs4 package.
+#
+# Ihar Hrachyshka <ihar.hrachyshka@gmail.com>, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2008-08-30 01:10+0300\n"
+"Last-Translator: Ihar Hrachyshka <ihar.hrachyshka@gmail.com>\n"
+"Language-Team: Belarusian Latin <i18n@mova.org>\n"
+"Language: be@latin\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Generator: KBabel 1.11.4\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Dla hetaj prahramy nie było akreślenaje licenzijnaje\n"
+"pahadnieńnie. Pašukaj jaho ŭ dakumentacyi dla prahramy\n"
+"ci ŭ jejnym vytočnym kodzie.\n"
+
+#: lib/kaboutdata.cpp:306
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Hetuju prahramu raspaŭsiudžvajuć pavodle ŭmovaŭ „%1”."
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License Version 2"
+
+#: lib/kaboutdata.cpp:356
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:360
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD License"
+
+#: lib/kaboutdata.cpp:361
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD License"
+
+#: lib/kaboutdata.cpp:364
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artistic License"
+
+#: lib/kaboutdata.cpp:365
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artistic License"
+
+#: lib/kaboutdata.cpp:368
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public License"
+
+#: lib/kaboutdata.cpp:372
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License Version 3"
+
+#: lib/kaboutdata.cpp:376
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License Version 3"
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:381
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:385
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Ułasnaja"
+
+#: lib/kaboutdata.cpp:388
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Nie akreślenaja"
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>Supołki pierakładčykaŭ z usiaho śvietu pierakładajuć KDE na roznyja movy."
+"</p><p>Padrabiaźniej pra pierakład KDE možna daviedacca na placoŭcy: <a href="
+"\"http://l10n.kde.org\">http://l10n.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1165
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Pakažy źviestki pra aŭtara"
+
+#: lib/kaboutdata.cpp:1166
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Pakažy źviestki pra licenziju"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1178
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Hetaja aplikacyja napisanaja kimści, chto choča zastacca nieviadomym."
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 napisali\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr ""
+"Kali łaska, paviedamlaj pra chiby praz placoŭku: http://bugs.kde.org.\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Kali łaska, paviedamlaj pra chiby praz placoŭku: %1.\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Biblijateka „%1” nia maje fabryki, jakaja b adpaviadała KDE 4."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "pm"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Kha"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Tra"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tir"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Źmiani"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Pierašli"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1, %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MiB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GiB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TiB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, fuzzy, qt-format
+#| msgid "%1 KiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KiB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MiB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GiB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TiB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, fuzzy, qt-format
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 TiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, fuzzy, qt-format
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 dzion"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, fuzzy, qt-format
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 hadzinaŭ"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 chvilinaŭ"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, fuzzy, qt-format
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 sekundaŭ"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgid "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 milisekundaŭ"
+msgstr[1] "%1 milisekundaŭ"
+msgstr[2] "%1 milisekundaŭ"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 dzion"
+msgstr[1] "%1 dzion"
+msgstr[2] "%1 dzion"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 hadzinaŭ"
+msgstr[1] "%1 hadzinaŭ"
+msgstr[2] "%1 hadzinaŭ"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 chvilinaŭ"
+msgstr[1] "%1 chvilinaŭ"
+msgstr[2] "%1 chvilinaŭ"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 sekundaŭ"
+msgstr[1] "%1 sekundaŭ"
+msgstr[2] "%1 sekundaŭ"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 i %2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+#| msgctxt "@item Calendar system"
+#| msgid "Invalid Calendar Type"
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Niapravilny kalandar"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Siońnia"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Učora"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Nastupny miesiac"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "Aŭtorak"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Sierada"
+
+#: lib/util/kformatprivate.cpp:535
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "Čaćvier"
+
+#: lib/util/kformatprivate.cpp:537
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "Piatnica"
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "Subota"
+
+#: lib/util/kformatprivate.cpp:541
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "Niadziela"
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Nastupny miesiac"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Aŭtorak"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Sierada"
+
+#: lib/util/kformatprivate.cpp:552
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "Čaćvier"
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Piatnica"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Subota"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Niadziela"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Zlatko Popov <zlatkopopov@fsa-bg.org>, 2006, 2007, 2008, 2009.
+# Yasen Pramatarov <yasen@lindeas.com>, 2009, 2010, 2011, 2012, 2013.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2013-07-23 01:52+0300\n"
+"Last-Translator: Yasen Pramatarov <yasen@lindeas.com>\n"
+"Language-Team: Bulgarian <dict@ludost.net>\n"
+"Language: bg\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.5\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Не е открит лиценз за тази програма. Моля, проверете\n"
+"документацията и за повече подробности.\n"
+
+#: lib/kaboutdata.cpp:306
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Тази програма се разпространява под условията на %1."
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License 2"
+
+#: lib/kaboutdata.cpp:356
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License 2"
+
+#: lib/kaboutdata.cpp:360
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Лиценз BSD"
+
+#: lib/kaboutdata.cpp:361
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Лиценз BSD"
+
+#: lib/kaboutdata.cpp:364
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artistic License"
+
+#: lib/kaboutdata.cpp:365
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artistic License"
+
+#: lib/kaboutdata.cpp:368
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public License"
+
+#: lib/kaboutdata.cpp:372
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License 3"
+
+#: lib/kaboutdata.cpp:376
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License Version 3"
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:381
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License 2"
+
+#: lib/kaboutdata.cpp:385
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Потребителски"
+
+#: lib/kaboutdata.cpp:388
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Не е посочен"
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>Благодарение на доброволния труд на преводачи от цял свят графичната "
+"среда KDE е преведена на много езици, включително и на български. За повече "
+"информация посетете <a href=\"http://l10n.kde.org\">http://l10n.kde.org</a></"
+"p><p>Проектът за превод на KDE на български език изпитва недостиг на опитни "
+"преводачи. <a href=\"http://kde.fsa-bg.org\">Търсят се доброволци</a>.</p>"
+
+#: lib/kaboutdata.cpp:1165
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Показване на информация за автора"
+
+#: lib/kaboutdata.cpp:1166
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Показване на информация за лиценза"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1178
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Авторът на програмата иска да остане анонимен."
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 е написана от\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Ако искате да съобщите за грешка, посетете http://bugs.kde.org.\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Моля, съобщавайте за грешки на %1.\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Библиотеката %1 не е съвместима с KDE 4."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "п.о."
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "с.о."
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "п.о."
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "AM"
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "@action"
+#| msgid "Mail"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Поща"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "@item Text character set"
+#| msgid "Thai"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Тайландски"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Редактиране"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Изпращане"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "п.о."
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, fuzzy, qt-format
+#| msgctxt "memory size in 1024 bytes"
+#| msgid "%1 KB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, fuzzy, qt-format
+#| msgctxt "size in 1024 bytes"
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, fuzzy, qt-format
+#| msgctxt "size in 2^20 bytes"
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, fuzzy, qt-format
+#| msgctxt "size in 2^30 bytes"
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, fuzzy, qt-format
+#| msgctxt "size in 2^50 bytes"
+#| msgid "%1 PiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, fuzzy, qt-format
+#| msgctxt "size in 2^60 bytes"
+#| msgid "%1 EiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, fuzzy, qt-format
+#| msgctxt "size in 2^70 bytes"
+#| msgid "%1 ZiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, fuzzy, qt-format
+#| msgctxt "size in 2^80 bytes"
+#| msgid "%1 YiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 дни"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 часа"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 минути"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 секунди"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 милисекунда"
+msgstr[1] "%1 милисекунда"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 дни"
+msgstr[1] "%1 дни"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 часа"
+msgstr[1] "%1 часа"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 минути"
+msgstr[1] "%1 минути"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 секунди"
+msgstr[1] "%1 секунди"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 и %2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+#| msgid "Invalid item."
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Неправилен запис."
+
+#: lib/util/kformatprivate.cpp:519
+#, fuzzy
+#| msgctxt "@option tomorrow"
+#| msgid "Tomorrow"
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Утре"
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Днес"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "вчера"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+#| msgctxt "@option last month"
+#| msgid "Last Month"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Предишен месец"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+#| msgctxt "@option last year"
+#| msgid "Last Year"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "Предишна година"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+#| msgctxt ""
+#| "referring to a filter on the modification and usage date of files/"
+#| "resources"
+#| msgid "Last Week"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Предишна седмица"
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+#| msgctxt "@option last year"
+#| msgid "Last Year"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "Предишна година"
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+#| msgctxt "@option next month"
+#| msgid "Next Month"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Следващ месец"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Следваща година"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+#| msgctxt "@option next week"
+#| msgid "Next Week"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Следващата седмица"
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Следваща година"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Следваща година"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Следваща година"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, fuzzy, qt-format
+#| msgctxt "City, Country"
+#| msgid "%1, %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# Bengali (Bangla) translation of kdelibs4.
+# Copyright (C) 2009, Free Software Foundation, Inc.
+# translation of kdelibs4.po to Bengali
+# Copyright (C) 2003, 2004, 2005, 2006, 2008 Free Software Foundation, Inc.
+# Deepayan Sarkar,,, <deepayan.sarkar@gmail.com>, 2003.
+# Deepayan Sarkar <deepayan.sarkar@gmail.com>, 2003, 2004, 2005.
+# Deepayan Sarkar <deepayan.sarkar@gmail.com>, 2006, 2008, 2009..
+# Deepayan Sarkar <deepayan.sarkar@gmail.com>, 2009, 2010, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2012-07-16 14:27+0530\n"
+"Last-Translator: Deepayan Sarkar <deepayan.sarkar@gmail.com>\n"
+"Language-Team: American English <kde-translation@bengalinux.org>\n"
+"Language: en_US\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Lokalize 1.4\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"এই প্রোগ্রামের লাইসেন্স সম্বন্ধে কোনো তথ্য পাওয়া যায়নি।\n"
+"অনুগ্রহ করে প্রোগ্রামটির ডকুমেন্টেশন এবং সোর্স খুঁজে দেখুন,\n"
+"সেখানে হয়তো কিছু পেতে পারেন।\n"
+
+#: lib/kaboutdata.cpp:306
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "এই প্রোগ্রামটি %1-এর শর্তাবলী অনুযায়ী বণ্টিত।"
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "জি-পি-এল v2"
+
+#: lib/kaboutdata.cpp:353
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License Version 2"
+
+#: lib/kaboutdata.cpp:356
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "এল-জি-পি-এল v2"
+
+#: lib/kaboutdata.cpp:357
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:360
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "বি-এস-ডি লাইসেন্স"
+
+#: lib/kaboutdata.cpp:361
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "বি-এস-ডি লাইসেন্স"
+
+#: lib/kaboutdata.cpp:364
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "আর্টিস্টিক লাইসেন্স"
+
+#: lib/kaboutdata.cpp:365
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "আর্টিস্টিক লাইসেন্স"
+
+#: lib/kaboutdata.cpp:368
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "কিউ পাবলিক লাইসেন্স"
+
+#: lib/kaboutdata.cpp:372
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "জি-পি-এল v3"
+
+#: lib/kaboutdata.cpp:373
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License Version 3"
+
+#: lib/kaboutdata.cpp:376
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "এল-জি-পি-এল v3"
+
+#: lib/kaboutdata.cpp:377
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License Version 3"
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "এল-জি-পি-এল v2"
+
+#: lib/kaboutdata.cpp:381
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:385
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "স্বনির্বাচিত"
+
+#: lib/kaboutdata.cpp:388
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "নির্ধারিত হয়নি"
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>সারা পৃথিবী জুড়ে বিভিন্ন প্রকল্পের সুবাদে কে.ডি.ই. অনেকগুলি ভাষায় অনুবাদ করা "
+"হচ্ছে। কে.ডি.ই. বাংলায় অনুবাদ করার কাজ করছে অঙ্কুর (http://www.AnkurBangla.org/"
+"projects/kde/)।</p><p>কে.ডি.ই. অনুবাদ সম্বন্ধে আরো জানতে দেখুন http://l10n.kde."
+"org</p>"
+
+#: lib/kaboutdata.cpp:1165
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "লেখক সংক্রান্ত তথ্য প্রদর্শিত হোক"
+
+#: lib/kaboutdata.cpp:1166
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "লাইসেন্স সংক্রান্ত তথ্য প্রদর্শিত হোক"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+#, fuzzy
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "ফিল্টার ত্রুটি"
+
+#: lib/kaboutdata.cpp:1178
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "এই অ্যাপলিকেশন-এর লেখক অজ্ঞাতপরিচয় থাকতে চান।"
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 লিখেছেন\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr ""
+"কোনো বাগ (প্রোগ্রামে সমস্যা) খুঁজে পেলে তার কথা জানাতে http://bugs.kde.org ব্যবহার "
+"করুন।\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "অনুগ্রহ করে বাগ রিপোর্ট %1-এ পাঠান।\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "%1 লাইব্রেরীটিতে কে.ডি.ই. 4-এ কার্যকরী জন্য কোন ফ্যাক্টরী নেই।"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "এ.এম."
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "পি.এম."
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "এ.এম."
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "খামিস (বৃহঃ)"
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "এ.এম."
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "মে"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tir"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "পি"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "পি"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "সম্পাদনা"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "জমা দাও"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "এ.এম."
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 বাইট"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 কিলোবাইট"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 মেগাবাইট"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 গিগাবাইট"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 বাইট"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, fuzzy, qt-format
+#| msgctxt "memory size in 1024 bytes"
+#| msgid "%1 KB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 কিলোবাইট"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 মেগাবাইট"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 গিগাবাইট"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 বাইট"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, fuzzy, qt-format
+#| msgctxt "size in 1024 bytes"
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 কিলোবাইট"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, fuzzy, qt-format
+#| msgctxt "size in 2^20 bytes"
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 মেগাবাইট"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, fuzzy, qt-format
+#| msgctxt "size in 2^30 bytes"
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 গিগাবাইট"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, fuzzy, qt-format
+#| msgctxt "size in 2^50 bytes"
+#| msgid "%1 PiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, fuzzy, qt-format
+#| msgctxt "size in 2^60 bytes"
+#| msgid "%1 EiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, fuzzy, qt-format
+#| msgctxt "size in 2^70 bytes"
+#| msgid "%1 ZiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, fuzzy, qt-format
+#| msgctxt "size in 2^80 bytes"
+#| msgid "%1 YiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 দিন"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 ঘন্টা"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 মিনিট"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 সেকণ্ড"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 মিলিসেকেন্ড"
+msgstr[1] "%1 মিলিসেকেন্ড"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 দিন"
+msgstr[1] "%1 দিন"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 ঘন্টা"
+msgstr[1] "%1 ঘন্টা"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 মিনিট"
+msgstr[1] "%1 মিনিট"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 সেকণ্ড"
+msgstr[1] "%1 সেকণ্ড"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 এবং %2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+#| msgid "Invalid item."
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "অবৈধ বস্তু।"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "আজ"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "গতকাল"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "পরের মাস"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "মঙ্গলবার"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "বুধবার"
+
+#: lib/util/kformatprivate.cpp:535
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "বৃহস্পতিবার"
+
+#: lib/util/kformatprivate.cpp:537
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "শুক্রবার"
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "শনিবার"
+
+#: lib/util/kformatprivate.cpp:541
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "রবিবার"
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "পরের মাস"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "মঙ্গলবার"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "বুধবার"
+
+#: lib/util/kformatprivate.cpp:552
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "বৃহস্পতিবার"
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "শুক্রবার"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "শনিবার"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "রবিবার"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, fuzzy, qt-format
+#| msgctxt "City, Country"
+#| msgid "%1, %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# translation of kdelibs4.po to Bengali INDIA
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Runa Bhattacharjee <runabh@gmail.com>, 2007.
+# Runa Bhattacharjee <runab@redhat.com>, 2008, 2009.
+# Runa Bhattacharjee <runab@fedoraproject.org>, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2009-12-28 14:35+0530\n"
+"Last-Translator: Runa Bhattacharjee <runab@redhat.com>\n"
+"Language-Team: Bengali INDIA <anubad@lists.ankur.org.in>\n"
+"Language: bn_IN\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: KBabel 1.11.4\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"এই প্রোগ্রামটির জন্য কোনো লাইসেন্স নির্ধারণ করা হয়নি।\n"
+"অনুগ্রহ করে, লাইসেন্স সংক্রান্ত কোনো তথ্যের জন্য প্রোগ্রামের সাথে প্রাপ্ত নথিপত্র অথবা "
+"মূল সোর্স যাচাই করুন।\n"
+
+#: lib/kaboutdata.cpp:306
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "%1-র শর্তাধীন এই প্রোগ্রামটি বিতরণ করা হয়েছে।"
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU জেনারেল পাবলিক লাইসেন্স, সংস্করণ ২"
+
+#: lib/kaboutdata.cpp:356
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU লেসার জেনারেল পাবলিক লাইসেন্স, সংস্করণ ২"
+
+#: lib/kaboutdata.cpp:360
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD লাইসেন্স"
+
+#: lib/kaboutdata.cpp:361
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD লাইসেন্স"
+
+#: lib/kaboutdata.cpp:364
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "শিল্পকর্ম সংক্রান্ত লাইসেন্স"
+
+#: lib/kaboutdata.cpp:365
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "শিল্পকর্ম সংক্রান্ত লাইসেন্স"
+
+#: lib/kaboutdata.cpp:368
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q পাবলিক লাইসেন্স"
+
+#: lib/kaboutdata.cpp:372
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU জেনারেল পাবলিক লাইসেন্স, সংস্করণ ৩"
+
+#: lib/kaboutdata.cpp:376
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU লেসার জেনারেল পাবলিক লাইসেন্স, সংস্করণ ৩"
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:381
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU লেসার জেনারেল পাবলিক লাইসেন্স, সংস্করণ ২"
+
+#: lib/kaboutdata.cpp:385
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "স্বনির্ধারিত"
+
+#: lib/kaboutdata.cpp:388
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "উল্লিখিত হয়নি"
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>বিশ্বব্যাপী বিভিন্ন অনুবাদক দলের অবিরত প্রয়াসে বিশ্বের বিভিন্ন ভাষায় KDE অনুবাদ "
+"করা হয়েছে।</p><p>KDE-র আন্তর্জাতীয়করণ সম্বন্ধে অধিক জানার জন্য <a href=\"http://"
+"l10n.kde.org\">http://l10n.kde.org</a></p> দেখুন।"
+
+#: lib/kaboutdata.cpp:1165
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "লেখকের পরিচিত প্রদর্শন করা হবে"
+
+#: lib/kaboutdata.cpp:1166
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "লাইসেন্স সংক্রান্ত তথ্য প্রদর্শন করা হয়"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1178
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "এই অ্যাপ্লিকেশনের নির্মাতা অজ্ঞাত থাকতে ইচ্ছুক।"
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 লিখেছেন\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "অনুগ্রহ করে http://bugs.kde.org-এ বাগ দায়ের করুন।\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "অনুগ্রহ করে %1-এ বাগ দায়ের করুন।\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "%1 লাইব্রেরি দ্বারা, KDE 4-র সাথে সুসংগত ফ্যাক্টরি উপলব্ধ করা হয় না।"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "পূর্বাহ্ন"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "অপরাহ্ন"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "পূর্বাহ্ন"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "@action"
+#| msgid "Mail"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "মেইল"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "@item Text character set"
+#| msgid "Thai"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "থাই"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "সম্পাদনা"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "জমা করুন"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "পূর্বাহ্ন"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 কিলোবাইট"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 মেগাবাইট"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 গিগাবাইট"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 টেরাবাইট"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 পিটাবাইট"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 এক্সাবাইট"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 জেটাবাইট"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 ইয়োটাবাইট"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, fuzzy, qt-format
+#| msgctxt "memory size in 1024 bytes"
+#| msgid "%1 KB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 কিলেবাইট"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 মেগাবাইট"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 গিগাবাইট"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 টেরাবাইট"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 পিটাবাইট"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 এক্সাবাইট"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 জেটাবাইট"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 ইয়োটাবাইট"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, fuzzy, qt-format
+#| msgctxt "size in 1024 bytes"
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 কিবিবাইট"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, fuzzy, qt-format
+#| msgctxt "size in 2^20 bytes"
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 মিবিবাইট"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, fuzzy, qt-format
+#| msgctxt "size in 2^30 bytes"
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 গিবিবাইট"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 টিবিবাইট"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 PiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 পেবিবাইট"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, fuzzy, qt-format
+#| msgctxt "size in 2^50 bytes"
+#| msgid "%1 EiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 এক্সবিবাইট"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, fuzzy, qt-format
+#| msgctxt "size in 2^60 bytes"
+#| msgid "%1 ZiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 জেবিবাইট"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, fuzzy, qt-format
+#| msgctxt "size in 2^70 bytes"
+#| msgid "%1 YiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 ইয়োবিবাইট"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 দিন"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 ঘন্টা"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 মিনিট"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 সেকেন্ড"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 মিলিসেকেন্ড"
+msgstr[1] "%1 মিলিসেকেন্ড"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 দিন"
+msgstr[1] "%1 দিন"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 ঘন্টা"
+msgstr[1] "%1 ঘন্টা"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 মিনিট"
+msgstr[1] "%1 মিনিট"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 সেকেন্ড"
+msgstr[1] "%1 সেকেন্ড"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 ও %2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+#| msgid "invalid flags"
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "অবৈধ ফ্ল্যাগ"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "আজ"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "গতকাল"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "পরবর্তী মাস"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "অন্তিম পৃষ্ঠা (&L)"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "অন্তিম পৃষ্ঠা (&L)"
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "অন্তিম পৃষ্ঠা (&L)"
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "পরবর্তী মাস"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "পরবর্তী বৎসর"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "পরবর্তী বৎসর"
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "পরবর্তী বৎসর"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "পরবর্তী বৎসর"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "পরবর্তী বৎসর"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "%1 is 'the slot asked for foo arguments', %2 is 'but there are only bar "
+#| "available'"
+#| msgid "%1, %2."
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2."
--- /dev/null
+# KDE breton translation
+# Copyright (C) 1998-2001 Free Software Foundation, Inc.
+# Jañ-Mai Drapier <jan-mai.drapier@mail.dotcom.fr>, 1998
+# Thierry Vignaud <tvignaud@mandriva.com>, 2001-2005
+# $Id$
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4-1.1\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2007-10-15 22:19+0200\n"
+"Last-Translator: Jañ-Mai Drapier <jan-mai.drapier@mail.dotcom.fr>\n"
+"Language-Team: Brezhoneg <Suav.Icb@wanadoo.fr>\n"
+"Language: br\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+
+#: lib/kaboutdata.cpp:306
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Dasparzhet eo ar goulev-mañ hervez ar %1."
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgid "GPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:356
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:360
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Aotre BSD"
+
+#: lib/kaboutdata.cpp:361
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Aotre BSD"
+
+#: lib/kaboutdata.cpp:364
+#, fuzzy
+#| msgid "Public Key"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Alc'hwez foran"
+
+#: lib/kaboutdata.cpp:365
+#, fuzzy
+#| msgid "Public Key"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Alc'hwez foran"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr ""
+
+#: lib/kaboutdata.cpp:369
+#, fuzzy
+#| msgid "Public Key"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Alc'hwez foran"
+
+#: lib/kaboutdata.cpp:372
+#, fuzzy
+#| msgid "GPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:376
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:381
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr ""
+
+#: lib/kaboutdata.cpp:385
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Diouzhoc'h"
+
+#: lib/kaboutdata.cpp:388
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "N'eo ket spisaet"
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>Bez e vez troet KDE e kalz yezhoù a-drugarez da skipailhoù treiñ ar bed.</"
+"p><p>Gweladennit <a href=\"http://l10n.kde.org\">http://l10n.kde.org</a> "
+"evit muioc'h a ditouroù diwar-benn arraktres KDE</p>"
+
+#: lib/kaboutdata.cpp:1165
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Diskouez titouroù diwar-benn an oberour"
+
+#: lib/kaboutdata.cpp:1166
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Diskouez titouroù diwar-benn an aotre"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+#, fuzzy
+#| msgid "Vietnamese"
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "Viet-Namek"
+
+#: lib/kaboutdata.cpp:1178
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 a oa skrivet gant\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Implijit http://bugs.kde.org evit reiñ da c'houzout ur gudenn.\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Mar plij kemennit an drein kavet da %1.\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "db"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "gm"
+
+#: lib/util/kformatprivate.cpp:121
+#, fuzzy
+#| msgid "On"
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "War enaou"
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "db"
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Ok"
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "Mat eo"
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Kha"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Kemmañ"
+
+#: lib/util/kformatprivate.cpp:127
+#, fuzzy
+#| msgid "G:"
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G:"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tir"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Aozañ"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+#, fuzzy
+#| msgctxt "QFont"
+#| msgid "Yi"
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:132
+#, fuzzy
+#| msgctxt "QFont"
+#| msgid "Yi"
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Kas"
+
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy
+#| msgid "B:"
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "G:"
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "db"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 O"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 O"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MiO"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GiO"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TiO"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 O"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 O"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 O"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 O"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 O"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, fuzzy, qt-format
+#| msgid "%1 KiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KiO"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MiO"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GiO"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TiO"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 O"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 O"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 O"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 O"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 O"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, fuzzy, qt-format
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiO"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiO"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiO"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiO"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 TiO"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 TiO"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 TiO"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 TiO"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, fuzzy, qt-format
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 deiz"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, fuzzy, qt-format
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 eur"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 munut"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, fuzzy, qt-format
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 eilenn"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 eilenn"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 deiz"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 eur"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 munut"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 eilenn"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 %2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Anvioù sac'het"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Hiziv"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Dec'h"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Miz a heul"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "Meurzh"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Merc'her"
+
+#: lib/util/kformatprivate.cpp:535
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "Yaou"
+
+#: lib/util/kformatprivate.cpp:537
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "Gwener"
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "Sadorn"
+
+#: lib/util/kformatprivate.cpp:541
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "Sul"
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Miz a heul"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Meurzh"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Merc'her"
+
+#: lib/util/kformatprivate.cpp:552
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "Yaou"
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Gwener"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Sadorn"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Sul"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1 %2"
--- /dev/null
+msgid ""
+msgstr ""
+"Project-Id-Version: kde5\n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: 2015-02-24 20:02+0100\n"
+"Last-Translator: Samir Ribić <megaribi@epn.ba>\n"
+"Language-Team: Bosnian\n"
+"Language: bs\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Qt-Contexts: true\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+
+#: lib/kaboutdata.cpp:296
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Nisu navedeni uslovi licenciranja za ovaj program.\n"
+"Provjerite da li su uslovi licenciranja navedeni u\n"
+"dokumentaciji ili izvornom kodu.\n"
+
+#: lib/kaboutdata.cpp:306
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Ovaj program se distribuira u skladu sa uslovima %1."
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU‑ova Opšta javna licenca, verzija 2"
+
+#: lib/kaboutdata.cpp:356
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU‑ova Manje opšta javna licenca, verzija 2"
+
+#: lib/kaboutdata.cpp:360
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD licenca"
+
+#: lib/kaboutdata.cpp:361
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD licenca"
+
+#: lib/kaboutdata.cpp:364
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Umjetnička licenca"
+
+#: lib/kaboutdata.cpp:365
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Umjetnička licenca"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL 1.0"
+
+#: lib/kaboutdata.cpp:369
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q javna licenca"
+
+#: lib/kaboutdata.cpp:372
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU‑ova Opšta javna licenca, verzija 3"
+
+#: lib/kaboutdata.cpp:376
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU‑ova Manje opšta javna licenca, verzija 3"
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgctxt "KAboutLicense|@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:381
+#, fuzzy
+#| msgctxt "KAboutLicense|@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU‑ova Manje opšta javna licenca, verzija 2"
+
+#: lib/kaboutdata.cpp:385
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "specijalno"
+
+#: lib/kaboutdata.cpp:388
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "(nije navedena)"
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt ""
+#| "KAboutData|replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE je preveden na razne jezike zahvaljujući radu prevodilaca iz "
+"cijelogsvijeta.</p><p>Za više informacija pravljenju međunarodnog KDE "
+"posjetite <a href=\"http://l10n.kde.org\">http://l10n.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1165
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Prikaži podatke o autorima"
+
+#: lib/kaboutdata.cpp:1166
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Prikaži podatke o licenci"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1178
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Ovaj program je napisao neko ko želi da ostane anoniman."
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "KAboutData CLI|"
+#| msgid "%s was written by:\n"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%s napisao:\n"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgctxt "KAboutData CLI|"
+#| msgid "Please use http://bugs.kde.org to report bugs."
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Koristite http://bugs.kde.org za prijavu grešaka."
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+#| msgctxt "KAboutData CLI|"
+#| msgid "Please report bugs to %s.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Prijavite greške na %1.\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Biblioteka %1 ne pruža KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr ""
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr ""
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 bajtova"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 bajtova"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 bajtova"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2.%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m %2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h %2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2m%3.%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h %2m %3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 dana"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 sati"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minuta"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 sekundi"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n millisecond(s)"
+#| msgid_plural "%n millisecond(s)"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n milisekunda"
+msgstr[1] "%n milisekunda"
+msgstr[2] "%n milisekunda"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n day(s)"
+#| msgid_plural "%n day(s)"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n dan"
+msgstr[1] "%n dan"
+msgstr[2] "%n dan"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n sat"
+msgstr[1] "%n sat"
+msgstr[2] "%n sat"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minut"
+msgstr[1] "%n minut"
+msgstr[2] "%n minut"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n sekunda"
+msgstr[1] "%n sekunda"
+msgstr[2] "%n sekunda"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 i %2"
+
+#: lib/util/kformatprivate.cpp:509
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:519
+#, fuzzy
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "za %1 dan"
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Danas"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Juče"
+
+#: lib/util/kformatprivate.cpp:529
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:531
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:533
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:539
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:546
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:548
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:550
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:554
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:556
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:558
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr ""
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# Translation of kcoreaddons5_qt.po to Catalan
+# Copyright (C) 1998-2018 This_file_is_part_of_KDE
+# This file is distributed under the license LGPL version 2.1 or
+# version 3 or later versions approved by the membership of KDE e.V.
+#
+# Sebastià Pla i Sanz <sps@sastia.com>, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007.
+# Antoni Bella Pérez <antonibella5@yahoo.com>, 2003, 2006, 2011, 2012, 2013, 2014, 2017.
+# Albert Astals Cid <aacid@kde.org>, 2004, 2005, 2007.
+# Josep Ma. Ferrer <txemaq@gmail.com>, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018.
+# Robert Millan <rmh@aybabtu.com>, 2009.
+# Orestes Mas <orestes@tsc.upc.edu>, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: kcoreaddons5_qt\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2018-12-07 13:03+0100\n"
+"Last-Translator: Josep Ma. Ferrer <txemaq@gmail.com>\n"
+"Language-Team: Catalan <kde-i18n-ca@kde.org>\n"
+"Language: ca\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 2.0\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Accelerator-Marker: &\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"No s'ha especificat cap terme de llicència per a aquest programa.\n"
+"Si us plau, busqueu els termes de llicència a la documentació\n"
+"o al codi font.\n"
+
+#: lib/kaboutdata.cpp:306
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Aquest programa es distribueix sota els termes de la %1."
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "Llicència pública general de GNU versió 2"
+
+#: lib/kaboutdata.cpp:356
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "Llicència pública general reduïda de GNU versió 2"
+
+#: lib/kaboutdata.cpp:360
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Llicència BSD"
+
+#: lib/kaboutdata.cpp:361
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Llicència BSD"
+
+#: lib/kaboutdata.cpp:364
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Llicència artística"
+
+#: lib/kaboutdata.cpp:365
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Llicència artística"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Llicència pública Q"
+
+#: lib/kaboutdata.cpp:372
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "Llicència pública general de GNU versió 3"
+
+#: lib/kaboutdata.cpp:376
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "Llicència pública general reduïda de GNU versió 3"
+
+#: lib/kaboutdata.cpp:380
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:381
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "Llicència pública general reduïda de GNU versió 2.1"
+
+#: lib/kaboutdata.cpp:385
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Personalitzada"
+
+#: lib/kaboutdata.cpp:388
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Sense especificar"
+
+#: lib/kaboutdata.cpp:937
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>El KDE s'ha traduït a molts idiomes gràcies al treball dels equips de "
+"traducció arreu del món.</p><p>Si voleu més informació quant a la "
+"internacionalització del KDE, visiteu <a href=\"https://l10n.kde.org"
+"\">https://l10n.kde.org</a>.</p> <p>Trobareu informació quant a l'equip de "
+"voluntaris que tradueix el KDE al català a <a href=\"https://cat.kde.org"
+"\">https://cat.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1165
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Mostra informació sobre l'autor."
+
+#: lib/kaboutdata.cpp:1166
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Mostra informació sobre la llicència."
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+"El nom del fitxer base de l'entrada de l'escriptori per aquesta aplicació."
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "nom del fitxer"
+
+#: lib/kaboutdata.cpp:1178
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Aquesta aplicació la va escriure algú que vol restar anònim."
+
+#: lib/kaboutdata.cpp:1180
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 el va escriure:"
+
+#: lib/kaboutdata.cpp:1191
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Si us plau, useu https://bugs.kde.org per a informar dels errors."
+
+#: lib/kaboutdata.cpp:1193
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Informeu dels errors a %1."
+
+#: lib/plugin/kpluginloader.cpp:122
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "La biblioteca %1 no ofereix cap KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "y"
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "z"
+
+#: lib/util/kformatprivate.cpp:118
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "a"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "f"
+
+#: lib/util/kformatprivate.cpp:120
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "p"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "µ"
+
+#: lib/util/kformatprivate.cpp:123
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "k"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Ki"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "M"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mi"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Gi"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "T"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ti"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pi"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "E"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ei"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "Z"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Zi"
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:140
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "bit"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B"
+
+#: lib/util/kformatprivate.cpp:146
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Hz"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 kB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2,%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h%2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2m%3,%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2,%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3,%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 dies"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 hores"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minuts"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 segons"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n mil·lisegon"
+msgstr[1] "%n mil·lisegons"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n dia"
+msgstr[1] "%n dies"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n hora"
+msgstr[1] "%n hores"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minut"
+msgstr[1] "%n minuts"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n segon"
+msgstr[1] "%n segons"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 i %2"
+
+#: lib/util/kformatprivate.cpp:509
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Data no vàlida"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Demà"
+
+#: lib/util/kformatprivate.cpp:521
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Avui"
+
+#: lib/util/kformatprivate.cpp:523
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Ahir"
+
+#: lib/util/kformatprivate.cpp:529
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Darrer dilluns"
+
+#: lib/util/kformatprivate.cpp:531
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "Darrer dimarts"
+
+#: lib/util/kformatprivate.cpp:533
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Darrer dimecres"
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "Darrer dijous"
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "Darrer divendres"
+
+#: lib/util/kformatprivate.cpp:539
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "Darrer dissabte"
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "Darrer diumenge"
+
+#: lib/util/kformatprivate.cpp:546
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Dilluns següent"
+
+#: lib/util/kformatprivate.cpp:548
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Dimarts següent"
+
+#: lib/util/kformatprivate.cpp:550
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Dimecres següent"
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "Dijous següent"
+
+#: lib/util/kformatprivate.cpp:554
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Divendres següent"
+
+#: lib/util/kformatprivate.cpp:556
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Dissabte següent"
+
+#: lib/util/kformatprivate.cpp:558
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Diumenge següent"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# Translation of kcoreaddons5_qt.po to Catalan (Valencian)
+# Copyright (C) 1998-2018 This_file_is_part_of_KDE
+# This file is distributed under the license LGPL version 2.1 or
+# version 3 or later versions approved by the membership of KDE e.V.
+#
+# Sebastià Pla i Sanz <sps@sastia.com>, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007.
+# Antoni Bella Pérez <antonibella5@yahoo.com>, 2003, 2006, 2011, 2012, 2013, 2014, 2017.
+# Albert Astals Cid <aacid@kde.org>, 2004, 2005, 2007.
+# Josep Ma. Ferrer <txemaq@gmail.com>, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018.
+# Robert Millan <rmh@aybabtu.com>, 2009.
+# Orestes Mas <orestes@tsc.upc.edu>, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: kcoreaddons5_qt\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2018-12-07 13:03+0100\n"
+"Last-Translator: Josep Ma. Ferrer <txemaq@gmail.com>\n"
+"Language-Team: Catalan <kde-i18n-ca@kde.org>\n"
+"Language: ca@valencia\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 2.0\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Accelerator-Marker: &\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"No s'ha especificat cap terme de llicència per a aquest programa.\n"
+"Per favor, busqueu els termes de llicència a la documentació\n"
+"o al codi font.\n"
+
+#: lib/kaboutdata.cpp:306
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Aquest programa es distribueix sota els termes de la %1."
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "Llicència pública general de GNU versió 2"
+
+#: lib/kaboutdata.cpp:356
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "Llicència pública general reduïda de GNU versió 2"
+
+#: lib/kaboutdata.cpp:360
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Llicència BSD"
+
+#: lib/kaboutdata.cpp:361
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Llicència BSD"
+
+#: lib/kaboutdata.cpp:364
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Llicència artística"
+
+#: lib/kaboutdata.cpp:365
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Llicència artística"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Llicència pública Q"
+
+#: lib/kaboutdata.cpp:372
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "Llicència pública general de GNU versió 3"
+
+#: lib/kaboutdata.cpp:376
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "Llicència pública general reduïda de GNU versió 3"
+
+#: lib/kaboutdata.cpp:380
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:381
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "Llicència pública general reduïda de GNU versió 2.1"
+
+#: lib/kaboutdata.cpp:385
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Personalitzada"
+
+#: lib/kaboutdata.cpp:388
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Sense especificar"
+
+#: lib/kaboutdata.cpp:937
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>El KDE s'ha traduït a molts idiomes gràcies al treball dels equips de "
+"traducció arreu del món.</p><p>Si voleu més informació quant a la "
+"internacionalització del KDE, visiteu <a href=\"https://l10n.kde.org"
+"\">https://l10n.kde.org</a>.</p> <p>Trobareu informació quant a l'equip de "
+"voluntaris que tradueix el KDE al català a <a href=\"https://cat.kde.org"
+"\">https://cat.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1165
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Mostra informació sobre l'autor."
+
+#: lib/kaboutdata.cpp:1166
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Mostra informació sobre la llicència."
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+"El nom del fitxer base de l'entrada de l'escriptori per aquesta aplicació."
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "nom del fitxer"
+
+#: lib/kaboutdata.cpp:1178
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Aquesta aplicació la va escriure algú que vol restar anònim."
+
+#: lib/kaboutdata.cpp:1180
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 el va escriure:"
+
+#: lib/kaboutdata.cpp:1191
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Per favor, useu https://bugs.kde.org per a informar dels errors."
+
+#: lib/kaboutdata.cpp:1193
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Informeu dels errors a %1."
+
+#: lib/plugin/kpluginloader.cpp:122
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "La biblioteca %1 no ofereix cap KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "y"
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "z"
+
+#: lib/util/kformatprivate.cpp:118
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "a"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "f"
+
+#: lib/util/kformatprivate.cpp:120
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "p"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "µ"
+
+#: lib/util/kformatprivate.cpp:123
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "k"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Ki"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "M"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mi"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Gi"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "T"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ti"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pi"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "E"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ei"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "Z"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Zi"
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:140
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "bit"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B"
+
+#: lib/util/kformatprivate.cpp:146
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Hz"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 kB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2,%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h%2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2m%3,%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2,%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3,%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 dies"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 hores"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minuts"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 segons"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n mil·lisegon"
+msgstr[1] "%n mil·lisegons"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n dia"
+msgstr[1] "%n dies"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n hora"
+msgstr[1] "%n hores"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minut"
+msgstr[1] "%n minuts"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n segon"
+msgstr[1] "%n segons"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 i %2"
+
+#: lib/util/kformatprivate.cpp:509
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Data no vàlida"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Demà"
+
+#: lib/util/kformatprivate.cpp:521
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Hui"
+
+#: lib/util/kformatprivate.cpp:523
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Ahir"
+
+#: lib/util/kformatprivate.cpp:529
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Darrer dilluns"
+
+#: lib/util/kformatprivate.cpp:531
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "Darrer dimarts"
+
+#: lib/util/kformatprivate.cpp:533
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Darrer dimecres"
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "Darrer dijous"
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "Darrer divendres"
+
+#: lib/util/kformatprivate.cpp:539
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "Darrer dissabte"
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "Darrer diumenge"
+
+#: lib/util/kformatprivate.cpp:546
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Dilluns següent"
+
+#: lib/util/kformatprivate.cpp:548
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Dimarts següent"
+
+#: lib/util/kformatprivate.cpp:550
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Dimecres següent"
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "Dijous següent"
+
+#: lib/util/kformatprivate.cpp:554
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Divendres següent"
+
+#: lib/util/kformatprivate.cpp:556
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Dissabte següent"
+
+#: lib/util/kformatprivate.cpp:558
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Diumenge següent"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# translation of kdelibs4.po to Qırımtatarca (Qırım Türkçesi)
+# Copyright (C) 2008 This_file_is_part_of_KDE
+# This file is distributed under the same license as the kdelibs package.
+#
+# Reşat SABIQ <tilde.birlik@gmail.com>, 2008, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2009-02-12 23:29-0600\n"
+"Last-Translator: Reşat SABIQ <tilde.birlik@gmail.com>\n"
+"Language-Team: Qırımtatarca (Qırım Türkçesi)\n"
+"Language: crh\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: KBabel 1.11.4\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+
+#: lib/kaboutdata.cpp:306
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Bu program %1 şartları altında dağıtıla."
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL sürüm 2 (v2)"
+
+#: lib/kaboutdata.cpp:353
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU Aleniy Litsenziyası Sürüm 2"
+
+#: lib/kaboutdata.cpp:356
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL sürüm 2 (v2)"
+
+#: lib/kaboutdata.cpp:357
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Daa Kiçik Aleniy Litsenziyası Sürüm 2"
+
+#: lib/kaboutdata.cpp:360
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD Litsenziyası"
+
+#: lib/kaboutdata.cpp:361
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD Litsenziyası"
+
+#: lib/kaboutdata.cpp:364
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Sanatkâr Litsenziyası"
+
+#: lib/kaboutdata.cpp:365
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Sanatkâr Litsenziyası"
+
+#: lib/kaboutdata.cpp:368
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL sürüm 1.0"
+
+#: lib/kaboutdata.cpp:369
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Aleniy Litsenziyası"
+
+#: lib/kaboutdata.cpp:372
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL sürüm 3 (v3)"
+
+#: lib/kaboutdata.cpp:373
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU Umumiy Aleniy Litsenziyası Sürüm 3"
+
+#: lib/kaboutdata.cpp:376
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL sürüm 3 (v3)"
+
+#: lib/kaboutdata.cpp:377
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Daa Kiçik Umumiy Aleniy Litsenziyası Sürüm 3"
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL sürüm 2 (v2)"
+
+#: lib/kaboutdata.cpp:381
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Daa Kiçik Aleniy Litsenziyası Sürüm 2"
+
+#: lib/kaboutdata.cpp:385
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Mahsus"
+
+#: lib/kaboutdata.cpp:388
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Belirtilmegen"
+
+#: lib/kaboutdata.cpp:937
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1165
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Müellif malümatını köster"
+
+#: lib/kaboutdata.cpp:1166
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Litsenziya malümatını köster"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1178
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Bu uyğulama isimsiz qalmağa istegen birev tarafından yazıldı."
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 \n"
+"%2 tarafından yazıldı"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Hatalarnı bildirmek içün lütfen http://bugs.kde.org qullanıñız.\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Hatalarnı lütfen %1 adresine bildiriñiz.\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "%1 fabrikası KDE 4 kelişikli fabrikanı teklif etmey."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "üe"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "üs"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "üe"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "5. kün"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "May"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tir"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Tarir"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Teslim et"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "üe"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MiB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GiB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TiB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, fuzzy, qt-format
+#| msgid "%1 KiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KiB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MiB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GiB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TiB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, fuzzy, qt-format
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 TiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, fuzzy, qt-format
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 kün"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, fuzzy, qt-format
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 saat"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 daqqa"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, fuzzy, qt-format
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 saniye"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgid "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 millisaniye"
+msgstr[1] "%1 millisaniye"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 kün"
+msgstr[1] "%1 kün"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 saat"
+msgstr[1] "%1 saat"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 daqqa"
+msgstr[1] "%1 daqqa"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 saniye"
+msgstr[1] "%1 saniye"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 ve %2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+#| msgctxt "@item Calendar system"
+#| msgid "Invalid Calendar Type"
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Keçersiz Taqvim Türü"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Bugün"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Tünevin"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Kelecek ay"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "Salı"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Çarşenbe"
+
+#: lib/util/kformatprivate.cpp:535
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "Cumaaqşamı"
+
+#: lib/util/kformatprivate.cpp:537
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "Cuma"
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "Cumaertesi"
+
+#: lib/util/kformatprivate.cpp:541
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "Bazar"
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Kelecek ay"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Salı"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Çarşenbe"
+
+#: lib/util/kformatprivate.cpp:552
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "Cumaaqşamı"
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Cuma"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Cumaertesi"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Bazar"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1 %2"
--- /dev/null
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Lukáš Tinkl <lukas@kde.org>, 2010, 2011, 2012.
+# Vít Pelčák <vit@pelcak.org>, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018.
+# Tomáš Chvátal <tomas.chvatal@gmail.com>, 2012, 2013.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2018-07-20 14:31+0100\n"
+"Last-Translator: Vit Pelcak <vit@pelcak.org>\n"
+"Language-Team: Czech <kde-i18n-doc@kde.org>\n"
+"Language: en_US\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+"X-Generator: Lokalize 2.0\n"
+"X-Language: cs_CZ\n"
+"X-Source-Language: en_US\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Pro tento program nebyly určeny žádné licenční podmínky.\n"
+"Prosím prohlédněte si dokumentaci nebo zdrojové texty,\n"
+"přejete-li si se dozvědět o licenčních podmínkách.\n"
+
+#: lib/kaboutdata.cpp:306
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Tento program je distribuován za podmínek %1."
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License verze 2"
+
+#: lib/kaboutdata.cpp:356
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public licence verze 2"
+
+#: lib/kaboutdata.cpp:360
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD licence"
+
+#: lib/kaboutdata.cpp:361
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD licence"
+
+#: lib/kaboutdata.cpp:364
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Umělecká licence"
+
+#: lib/kaboutdata.cpp:365
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Umělecká licence"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q veřejná licence"
+
+#: lib/kaboutdata.cpp:372
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public licence verze 3"
+
+#: lib/kaboutdata.cpp:376
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public licence verze 3"
+
+#: lib/kaboutdata.cpp:380
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:381
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public licence verze 2.1"
+
+#: lib/kaboutdata.cpp:385
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Vlastní"
+
+#: lib/kaboutdata.cpp:388
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Neurčeno"
+
+#: lib/kaboutdata.cpp:937
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE je přeloženo do mnoha jazyků díky práci překladatelských týmů po "
+"celém světě.</p><p>Více informací o internacionalizaci KDE najdete na <a "
+"href=\"https://l10n.kde.org\">https://l10n.kde.org</a>.</p>"
+
+#: lib/kaboutdata.cpp:1165
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Zobrazit informaci o autorech."
+
+#: lib/kaboutdata.cpp:1166
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Zobrazit informaci o licenci."
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Základní název souboru položky na ploše pro tuto aplikaci."
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "název souboru"
+
+#: lib/kaboutdata.cpp:1178
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Tato aplikace byla napsána někým, kdo chce zůstat v anonymitě."
+
+#: lib/kaboutdata.cpp:1180
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 napsal:"
+
+#: lib/kaboutdata.cpp:1191
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Prosím, pro hlášení chyb použijte https://bugs.kde.org."
+
+#: lib/kaboutdata.cpp:1193
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Prosím hlaste chyby na %1."
+
+#: lib/plugin/kpluginloader.cpp:122
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Knihovna '%1' neposkytuje KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2.%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h%2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2m%3.%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 dnů"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 hodin"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minut"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 sekund"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n milisekunda"
+msgstr[1] "%n milisekundy"
+msgstr[2] "%n milisekund"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n den"
+msgstr[1] "%n dny"
+msgstr[2] "%n dnů"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n hodina"
+msgstr[1] "%n hodiny"
+msgstr[2] "%n hodin"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minuta"
+msgstr[1] "%n minuty"
+msgstr[2] "%n minut"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n sekunda"
+msgstr[1] "%n sekundy"
+msgstr[2] "%n sekund"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 a %2"
+
+#: lib/util/kformatprivate.cpp:509
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Neplatné datum"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Zítra"
+
+#: lib/util/kformatprivate.cpp:521
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Dnes"
+
+#: lib/util/kformatprivate.cpp:523
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Včera"
+
+#: lib/util/kformatprivate.cpp:529
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Minulé pondělí"
+
+#: lib/util/kformatprivate.cpp:531
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "Minulé úterý"
+
+#: lib/util/kformatprivate.cpp:533
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Minulá středa"
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "Minulý čtvrtek"
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "Minulý pátek"
+
+#: lib/util/kformatprivate.cpp:539
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "Minulá sobota"
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "Minulá neděle"
+
+#: lib/util/kformatprivate.cpp:546
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Následující pondělí"
+
+#: lib/util/kformatprivate.cpp:548
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Následující úterý"
+
+#: lib/util/kformatprivate.cpp:550
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Následující středa"
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "Následující čtvrtek"
+
+#: lib/util/kformatprivate.cpp:554
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Následující pátek"
+
+#: lib/util/kformatprivate.cpp:556
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Následující sobota"
+
+#: lib/util/kformatprivate.cpp:558
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Následující neděle"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# translation of kdelibs4.po to Kaszëbsczi
+#
+# Michôł Òstrowsczi <michol@linuxcsb.org>, 2006, 2007, 2008, 2009.
+# Mark Kwidzińsczi <mark@linuxcsb.org>, 2006, 2007, 2008, 2009.
+# Mark Kwidzińśczi <mark@linuxcsb.org>, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2009-12-04 22:09+0100\n"
+"Last-Translator: Mark Kwidzińśczi <mark@linuxcsb.org>\n"
+"Language-Team: Kaszëbsczi <i18n-csb@linuxcsb.org>\n"
+"Language: csb\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.0\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
+"|| n%100>=20) ? 1 : 2)\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Felëje wëdowiédzô ò licencëji dlô ti programë.\n"
+"Proszã sprôwdzëc dokùmentacëjã abò zdroje programë, bë\n"
+"nalezc licencëjã.\n"
+
+#: lib/kaboutdata.cpp:306
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Programa je ùżëczonô wedle %1."
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License wersëjô 2"
+
+#: lib/kaboutdata.cpp:356
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License wersëjô 2"
+
+#: lib/kaboutdata.cpp:360
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Licencëjô BSD"
+
+#: lib/kaboutdata.cpp:361
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Licencëjô BSD"
+
+#: lib/kaboutdata.cpp:364
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Licencëjô Artistic"
+
+#: lib/kaboutdata.cpp:365
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Licencëjô Artistic"
+
+#: lib/kaboutdata.cpp:368
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Licencëjô Q Public"
+
+#: lib/kaboutdata.cpp:372
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License wersëjô 3"
+
+#: lib/kaboutdata.cpp:376
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License wersëjô 3"
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:381
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License wersëjô 2"
+
+#: lib/kaboutdata.cpp:385
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Swòjô"
+
+#: lib/kaboutdata.cpp:388
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Nie wëznaczonô"
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE je dolmaczoné przez Kaszëbsczé Karno Dolmaczów, chtërnegò starnã "
+"nalezesz pòd adresą <a href=\"http://kde.linuxcsb.org\">kde.linuxcsb.org</"
+"a></p> <p>Jeżle nalezesz zmiłczi ë felë w dolmaczënkù, napiszë proszã ò tim "
+"na adresã <a href=\"mailto:i18n-csb@linuxcsb.org\">i18n-csb@linuxcsb.org</"
+"a>. Zazdrzë téż na naji starnë wspiarca dlô ôpen-ùdbów <a href=\"http://www."
+"linuxcsb.org\">www.linuxcsb.org</a></p> <p>Roczimë téż do pòmòcë przë ti "
+"ùdbie! Wëdowiédzô ò tim jakno mòżesz z nama wespółrobic nalezesz na naji "
+"starnie.</p>"
+
+#: lib/kaboutdata.cpp:1165
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Pòkôżë wëdowiédzã ò ùsôdzcë"
+
+#: lib/kaboutdata.cpp:1166
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Pòkôżë wëdowiédzã ò licencëji"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1178
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Na programa ùsôdzëł człowiek co chcôł òstac anonimòwi."
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 napisóny przez\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Do zgłôszaniô felów proszã brëkòwac starnã http://bugs.kde.org.\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Zgłoszë rapòrtë ò felach do %1.\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Bibloteka %1 nie dôwô infrastrukturë zgódny z KDE 4."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "dp"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "pp"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "dp"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgctxt "Coptic month 4 - ShortName"
+#| msgid "Kia"
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Kia"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "Ethiopian month 8 - ShortName"
+#| msgid "Miy"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Miy"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tir"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "Coptic weekday 4 - ShortDayName"
+#| msgid "Pti"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pti"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Edicëjô"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Wëslë"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "dp"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, fuzzy, qt-format
+#| msgctxt "memory size in 1024 bytes"
+#| msgid "%1 KB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, fuzzy, qt-format
+#| msgctxt "size in 1024 bytes"
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, fuzzy, qt-format
+#| msgctxt "size in 2^20 bytes"
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, fuzzy, qt-format
+#| msgctxt "size in 2^30 bytes"
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 PiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, fuzzy, qt-format
+#| msgctxt "size in 2^50 bytes"
+#| msgid "%1 EiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, fuzzy, qt-format
+#| msgctxt "size in 2^60 bytes"
+#| msgid "%1 ZiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, fuzzy, qt-format
+#| msgctxt "size in 2^70 bytes"
+#| msgid "%1 YiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 dni"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 gòdz."
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 min."
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 sek."
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 milisek."
+msgstr[1] "%1 milisek."
+msgstr[2] "%1 milisek."
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 dni"
+msgstr[1] "%1 dni"
+msgstr[2] "%1 dni"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 gòdz."
+msgstr[1] "%1 gòdz."
+msgstr[2] "%1 gòdz."
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 min."
+msgstr[1] "%1 min."
+msgstr[2] "%1 min."
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 sek."
+msgstr[1] "%1 sek."
+msgstr[2] "%1 sek."
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 ë %2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+#| msgctxt "@item Calendar system"
+#| msgid "Invalid Calendar Type"
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Lëchi ôrt kalãdôrza"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Dzysô"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Wczora"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Zôstny miesąc"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "wtórk"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "strzoda"
+
+#: lib/util/kformatprivate.cpp:535
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "czwiôrtk"
+
+#: lib/util/kformatprivate.cpp:537
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "piątk"
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "sobòta"
+
+#: lib/util/kformatprivate.cpp:541
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "niedzela"
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Zôstny miesąc"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "wtórk"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "strzoda"
+
+#: lib/util/kformatprivate.cpp:552
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "czwiôrtk"
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "piątk"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "sobòta"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "niedzela"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1 %2"
--- /dev/null
+# Cyfieithiad o kdelibs4.po i Cymraeg
+# translation of kdelibs4.po to Cymraeg
+# Translation of kdelibs4.po to Cymraeg
+# Translation of clearfuzzytest.po to Cymraeg
+# translation of clearfuzzytest.po to Cymraeg
+# translation of clearfuzzy.po to Cymraeg
+# KDE yn Gymraeg.
+# Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
+# www.kyfieithu.co.uk <kyfieithu@dotmon.com>, 2003.
+# Kgyfieithu <kyfieithu@dotmon.com>, 2003.
+# KGyfieithu <kyfieithu@dotmon.com>, 2003.
+# KD at KGyfieithu <kyfieithu@dotmon.com>, 2003, 2004.
+# Kyfieithu <kyfieithu@dotmon.com>, 2004.
+# Kevin Donnelly <kevin@dotmon.com>, 2005.
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2005-01-28 17:54+0000\n"
+"Last-Translator: Kevin Donnelly <kevin@dotmon.com>\n"
+"Language-Team: Cymraeg\n"
+"Language: cy\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.9\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Ni phenodwyd termau trwyddedu am y rhaglen yma.\n"
+"Gwiriwch y ddogfeniaeth neu'r côd am unrhyw dermau \n"
+"trwyddedu.\n"
+
+#: lib/kaboutdata.cpp:306
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Dosbarthir y rhaglen yma dan dermau'r %1."
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgid "GPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:356
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:360
+#, fuzzy
+#| msgid "License:"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Trwydded:"
+
+#: lib/kaboutdata.cpp:361
+#, fuzzy
+#| msgid "License:"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Trwydded:"
+
+#: lib/kaboutdata.cpp:364
+#, fuzzy
+#| msgid "Public Key"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Allwedd Gyhoeddus"
+
+#: lib/kaboutdata.cpp:365
+#, fuzzy
+#| msgid "Public Key"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Allwedd Gyhoeddus"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr ""
+
+#: lib/kaboutdata.cpp:369
+#, fuzzy
+#| msgid "Public Key"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Allwedd Gyhoeddus"
+
+#: lib/kaboutdata.cpp:372
+#, fuzzy
+#| msgid "GPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:376
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:381
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr ""
+
+#: lib/kaboutdata.cpp:385
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "A&ddasu"
+
+#: lib/kaboutdata.cpp:388
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Nid oes darparwr wedi ei dewis."
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>Cyfieithir KDE i mewn i lawer o ieithoedd diolch i tîmau cyfieithu dros y "
+"byd i gyd.</p><p>Am ragor o wybodaeth ar rhyngwledeiddio KDE, ymwelwch â "
+"http://i18n.kde.org.</p>Am ragor o wybodaeth ar KDE a meddalwedd rhydd yn "
+"Gymraeg, ewch i http://www.kyfieithu.co.uk</p>"
+
+#: lib/kaboutdata.cpp:1165
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Dangos gwybodaeth awdur"
+
+#: lib/kaboutdata.cpp:1166
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Dangos gwybodaeth trwydded"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+#, fuzzy
+#| msgid "Vietnamese"
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "Fietnamaidd"
+
+#: lib/kaboutdata.cpp:1178
+#, fuzzy
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Ysgrifennwyd %1 gan berson sy'n dymuno aros yn anhysbys."
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"ysgrifennwyd %1 gan\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr ""
+"Defnyddiwch http://bugs.kde.org er mwyn adrodd namau, peidiwch ac anfon "
+"ebost i'r awduron yn uniongyrchol.\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr ""
+"Defnyddiwch %1 er mwyn adrodd namau, peidiwch ac anfon ebost i'r awduron yn "
+"uniongyrchol.\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer an %2 function."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Nid y'w rhaglengell %1 yn cynnig swyddogaeth %2."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "yb"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "yp"
+
+#: lib/util/kformatprivate.cpp:121
+#, fuzzy
+#| msgid "On"
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "Ymlaen"
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "yb"
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Ok"
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "Iawn"
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Kha"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Addasu"
+
+#: lib/util/kformatprivate.cpp:127
+#, fuzzy
+#| msgid "G:"
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G:"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tir"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Golygu"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+#, fuzzy
+#| msgctxt "QFont"
+#| msgid "Yi"
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr " Yi"
+
+#: lib/util/kformatprivate.cpp:132
+#, fuzzy
+#| msgctxt "QFont"
+#| msgid "Yi"
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr " Yi"
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Cyflwyno"
+
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy
+#| msgid "B:"
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B:"
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "yb"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 %2"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, fuzzy, qt-format
+#| msgid "Monday"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "Dydd Llun"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 o ddewisiadau"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 o ddewisiadau"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 o ddewisiadau"
+msgstr[1] "%1 o ddewisiadau"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgid "Monday"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "Dydd Llun"
+msgstr[1] "Dydd Llun"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] ""
+msgstr[1] ""
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 o ddewisiadau"
+msgstr[1] "%1 o ddewisiadau"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 o ddewisiadau"
+msgstr[1] "%1 o ddewisiadau"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 %2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "baneri annilys"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+#| msgid "Monday"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Dydd Llun"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Dydd Mawrth"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Mis nesaf"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "Dydd Mawrth"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Dydd Mercher"
+
+#: lib/util/kformatprivate.cpp:535
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "Dydd Iau"
+
+#: lib/util/kformatprivate.cpp:537
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "Dydd Gwener"
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "Dydd Sadwrn"
+
+#: lib/util/kformatprivate.cpp:541
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "Dydd Sul"
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Mis nesaf"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Dydd Mawrth"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Dydd Mercher"
+
+#: lib/util/kformatprivate.cpp:552
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "Dydd Iau"
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Dydd Gwener"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Dydd Sadwrn"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Dydd Sul"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1 %2"
--- /dev/null
+# translation of kdelibs4.po to
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Martin Schlander, 2008.
+# Martin Schlander <mschlander@opensuse.org>, 2008.
+# Martin Schlander <mschlander@opensuse.org>, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018.
+# Keld Simonsen <keld@keldix.com>, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2018-07-18 21:03+0100\n"
+"Last-Translator: Martin Schlander <mschlander@opensuse.org>\n"
+"Language-Team: Danish <kde-i18n-doc@kde.org>\n"
+"Language: da\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Lokalize 2.0\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Der er ikke angivet licensbetingelser for dette program.\n"
+"Tjek venligst dokumentationen eller kilden for\n"
+"licensbetingelser.\n"
+
+#: lib/kaboutdata.cpp:306
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Dette program distribueres under betingelserne i %1."
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License Version 2"
+
+#: lib/kaboutdata.cpp:356
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:360
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD License"
+
+#: lib/kaboutdata.cpp:361
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD License"
+
+#: lib/kaboutdata.cpp:364
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artistic License"
+
+#: lib/kaboutdata.cpp:365
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artistic License"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public License"
+
+#: lib/kaboutdata.cpp:372
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License Version 3"
+
+#: lib/kaboutdata.cpp:376
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License Version 3"
+
+#: lib/kaboutdata.cpp:380
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:381
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License Version 2.1"
+
+#: lib/kaboutdata.cpp:385
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Tilpasset"
+
+#: lib/kaboutdata.cpp:388
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Ikke angivet"
+
+#: lib/kaboutdata.cpp:937
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE er oversat til mange sprog takket være oversættelsesholdenes arbejde "
+"verden over.</p> <p>Har du kommentarer eller forslag til forbedringer "
+"angående den danske oversættelse af KDE, er du velkommen til at kontakte "
+"ovenstående.</p> <p>Se også <a href=\"http://wiki.dansk-gruppen.dk/\">http://"
+"wiki.dansk-gruppen.dk/</a></p>"
+
+#: lib/kaboutdata.cpp:1165
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Vis udviklerinformation"
+
+#: lib/kaboutdata.cpp:1166
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Vis licensinformation"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Basisfilnavnet for desktop-indgangen for dette program."
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "filnavn"
+
+#: lib/kaboutdata.cpp:1178
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Dette program blev skrevet af en som ønsker at forblive anonym."
+
+#: lib/kaboutdata.cpp:1180
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 blev skrevet af:"
+
+#: lib/kaboutdata.cpp:1191
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Brug venligst https://bugs.kde.org til at rapportere om fejl."
+
+#: lib/kaboutdata.cpp:1193
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Rapportér venligst fejl til %1."
+
+#: lib/plugin/kpluginloader.cpp:122
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Biblioteket %1 tilbyder ikke KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "pm"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgctxt "Coptic month 4 - ShortName"
+#| msgid "Kia"
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Kia"
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "AM"
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "Ethiopian month 8 - ShortName"
+#| msgid "Miy"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Miy"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tir"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "Coptic weekday 4 - ShortDayName"
+#| msgid "Pti"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pti"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Redigér"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Indsend"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2.%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h%2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2m%3.%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 days"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 timer"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minutter"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 sekunder"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n millisekund(er)"
+msgstr[1] "%n millisekund(er)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n dag(e)"
+msgstr[1] "%n dag(e)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n time(r)"
+msgstr[1] "%n time(r)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minut(ter)"
+msgstr[1] "%n minut(ter)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n sekund(er)"
+msgstr[1] "%n sekund(er)"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 og %2"
+
+#: lib/util/kformatprivate.cpp:509
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Ugyldig dato"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "I morgen"
+
+#: lib/util/kformatprivate.cpp:521
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "I dag"
+
+#: lib/util/kformatprivate.cpp:523
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "I går"
+
+#: lib/util/kformatprivate.cpp:529
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Sidste mandag"
+
+#: lib/util/kformatprivate.cpp:531
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "Sidste tirsdag"
+
+#: lib/util/kformatprivate.cpp:533
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Sidste onsdag"
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "Sidste torsdag"
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "Sidste fredag"
+
+#: lib/util/kformatprivate.cpp:539
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "Sidste lørdag"
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "Sidste søndag"
+
+#: lib/util/kformatprivate.cpp:546
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Næste mandag"
+
+#: lib/util/kformatprivate.cpp:548
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Næste tirsdag"
+
+#: lib/util/kformatprivate.cpp:550
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Næste onsdag"
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "Næste torsdag"
+
+#: lib/util/kformatprivate.cpp:554
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Næste fredag"
+
+#: lib/util/kformatprivate.cpp:556
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Næste lørdag"
+
+#: lib/util/kformatprivate.cpp:558
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Næste søndag"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# Thomas Diehl <thd@kde.org>, 2002, 2003, 2004, 2005.
+# Stefan Winter <swinter@kde.org>, 2004.
+# Thomas Fischer <thomas.fischer@t-fischer.net>, 2004.
+# Stephan Johach <hunsum@gmx.de>, 2004, 2005, 2006, 2007.
+# Georg Schuster <gschuster@utanet.at>, 2005.
+# Thomas Reitelbach <tr@erdfunkstelle.de>, 2005, 2006, 2007, 2008, 2009.
+# Burkhard Lück <lueck@hube-lueck.de>, 2006, 2007, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2017, 2018.
+# Frederik Schwarzer <schwarzer@kde.org>, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2015, 2016.
+# Johannes Obermayr <johannesobermayr@gmx.de>, 2010.
+# Panagiotis Papadopoulos <pano_90@gmx.net>, 2010.
+# Rolf Eike Beer <kde@opensource.sf-tec.de>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2018-12-10 05:55+0100\n"
+"Last-Translator: Burkhard Lück <lueck@hube-lueck.de>\n"
+"Language-Team: German <kde-i18n-de@kde.org>\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 2.0\n"
+"X-Qt-Contexts: true\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#: lib/kaboutdata.cpp:296
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Für dieses Programm ist keine Lizenz angegeben.\n"
+"Bitte sehen Sie in der Dokumentation oder im Quellcode\n"
+"nach den Lizenzbedingungen.\n"
+
+#: lib/kaboutdata.cpp:306
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Dieses Programm wird unter den Bedingungen der %1 veröffentlicht."
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License Version 2"
+
+#: lib/kaboutdata.cpp:356
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:360
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD-Lizenz"
+
+#: lib/kaboutdata.cpp:361
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD-Lizenz"
+
+#: lib/kaboutdata.cpp:364
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artistic License"
+
+#: lib/kaboutdata.cpp:365
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artistic License"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public License"
+
+#: lib/kaboutdata.cpp:372
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License Version 3"
+
+#: lib/kaboutdata.cpp:376
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License Version 3"
+
+#: lib/kaboutdata.cpp:380
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:381
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License Version 2.1"
+
+#: lib/kaboutdata.cpp:385
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Benutzerdefiniert"
+
+#: lib/kaboutdata.cpp:388
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Nicht angegeben"
+
+#: lib/kaboutdata.cpp:937
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE wird dank der Arbeit von Teams in aller Welt in viele Sprachen "
+"übersetzt.</p><p>Allgemeine Informationen zur Übersetzung finden Sie unter "
+"<a href=\"https://l10n.kde.org\">http://l10n.kde.org</a>, <br/>Informationen "
+"zur deutschen Übersetzung unter <a href=\"https://l10n.kde.org/teams/de"
+"\">http://l10n.kde.org/teams/de</a>.</p>"
+
+#: lib/kaboutdata.cpp:1165
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Autor-Informationen anzeigen."
+
+#: lib/kaboutdata.cpp:1166
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Lizenz-Informationen anzeigen."
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Der Basis-Dateiname des Desktop-Eintrags dieser Anwendung."
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "Dateiname"
+
+#: lib/kaboutdata.cpp:1178
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr ""
+"Diese Anwendung wurde von jemandem geschrieben, der/die lieber anonym "
+"bleiben möchte."
+
+#: lib/kaboutdata.cpp:1180
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 wurde geschrieben von:"
+
+#: lib/kaboutdata.cpp:1191
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr ""
+"Bitte verwenden Sie https://bugs.kde.org für Fehlerberichte und Wünsche."
+
+#: lib/kaboutdata.cpp:1193
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Bitte berichten Sie Fehler an %1."
+
+#: lib/plugin/kpluginloader.cpp:122
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Die Bibliothek %1 enthält keine KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "y"
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "z"
+
+#: lib/util/kformatprivate.cpp:118
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "a"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "f"
+
+#: lib/util/kformatprivate.cpp:120
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "p"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "µ"
+
+#: lib/util/kformatprivate.cpp:123
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "k"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Ki"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "M"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mi"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Gi"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "T"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ti"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pi"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "E"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ei"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "Z"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Zi"
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:140
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Bit"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B"
+
+#: lib/util/kformatprivate.cpp:146
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Hz"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1 m %2.%3 s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1 m %2 s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1 h %2 m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1 h %2 m %3.%4 s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1 h %2 m %3 s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 Tage"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 Stunden"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 Minuten"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 Sekunden"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n Millisekunde(n)"
+msgstr[1] "%n Millisekunde(n)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n Tag(e)"
+msgstr[1] "%n Tag(e)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n Stunde(n)"
+msgstr[1] "%n Stunde(n)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n Minute(n)"
+msgstr[1] "%n Minute(n)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n Sekunde(n)"
+msgstr[1] "%n Sekunde(n)"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 und %2"
+
+#: lib/util/kformatprivate.cpp:509
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Ungültiges Datum"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Morgen"
+
+#: lib/util/kformatprivate.cpp:521
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Heute"
+
+#: lib/util/kformatprivate.cpp:523
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Gestern"
+
+#: lib/util/kformatprivate.cpp:529
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Letzten Montag"
+
+#: lib/util/kformatprivate.cpp:531
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "Letzten Dienstag"
+
+#: lib/util/kformatprivate.cpp:533
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Letzten Mittwoch"
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "Letzten Donnerstag"
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "Letzten Freitag"
+
+#: lib/util/kformatprivate.cpp:539
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "Letzten Samstag"
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "Letzten Sonntag"
+
+#: lib/util/kformatprivate.cpp:546
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Nächsten Montag"
+
+#: lib/util/kformatprivate.cpp:548
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Nächsten Dienstag"
+
+#: lib/util/kformatprivate.cpp:550
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Nächsten Mittwoch"
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "Nächsten Donnerstag"
+
+#: lib/util/kformatprivate.cpp:554
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Nächsten Freitag"
+
+#: lib/util/kformatprivate.cpp:556
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Nächsten Samstag"
+
+#: lib/util/kformatprivate.cpp:558
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Nächsten Sonntag"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# translation of kdelibs4.po to Greek
+# translation of kdelibs4.po to
+# Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+# Last MAJOR revision (whole file) (29-03-2003 - Stergios Dramis).
+#
+# Dimitris Kamenopoulos <d.kamenopoulos@mail.ntua.gr>, 2000-2002.
+# Stergios Dramis <sdramis@egnatia.ee.auth.gr>, 2002-2004.
+# Κώστας Μπουκουβάλας <quantis@hellug.gr>, 2005.
+# Spiros Georgaras <sngeorgaras@otenet.gr>, 2005, 2006, 2007, 2008.
+# Toussis Manolis <manolis@koppermind.homelinux.org>, 2006, 2007, 2008, 2009.
+# Spiros Georgaras <sng@hellug.gr>, 2007, 2008.
+# Σπύρος Γεωργαράς <sngeorgaras@otenet.gr>, 2008.
+# Petros <pvidalis@gmail.com>, 2009.
+# Petros Vidalis <p_vidalis@hotmail.com>, 2010, 2011.
+# Dimitrios Glentadakis <dglent@gmail.com>, 2010, 2011, 2012, 2013, 2014.
+# nikos, 2011.
+# Stelios <sstavra@gmail.com>, 2012, 2013.
+# Dimitris Kardarakos <dimkard@gmail.com>, 2015, 2016.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2016-11-04 17:38+0200\n"
+"Last-Translator: Dimitris Kardarakos <dimkard@gmail.com>\n"
+"Language-Team: Greek <kde-i18n-el@kde.org>\n"
+"Language: el\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 2.0\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Δεν έχουν καθοριστεί όροι χρήσης για αυτό το πρόγραμμα.\n"
+"Παρακαλώ ελέγξτε την τεκμηρίωση ή τον πηγαίο κώδικά του\n"
+"για οποιονδήποτε όρο χρήσης.\n"
+
+#: lib/kaboutdata.cpp:306
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Το πρόγραμμα διανέμεται υπό τους όρους της %1."
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "Γενική Άδεια Δημόσιας Χρήσης GNU έκδοση 2"
+
+#: lib/kaboutdata.cpp:356
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "Ελάσσονα Γενική Άδεια Δημόσιας Χρήσης GNU έκδοση 2"
+
+#: lib/kaboutdata.cpp:360
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Άδεια BSD"
+
+#: lib/kaboutdata.cpp:361
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Άδεια BSD"
+
+#: lib/kaboutdata.cpp:364
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Καλλιτεχνική άδεια"
+
+#: lib/kaboutdata.cpp:365
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Καλλιτεχνική άδεια"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Δημόσια άδεια Q"
+
+#: lib/kaboutdata.cpp:372
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "Γενική Άδεια Δημόσιας Χρήσης GNU έκδοση 3"
+
+#: lib/kaboutdata.cpp:376
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "Ελάσσονα Γενική Άδεια Δημόσιας Χρήσης GNU έκδοση 3"
+
+#: lib/kaboutdata.cpp:380
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:381
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "Ελάσσονα Γενική Άδεια Δημόσιας Χρήσης GNU έκδοση 2.1"
+
+#: lib/kaboutdata.cpp:385
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Προσαρμοσμένη"
+
+#: lib/kaboutdata.cpp:388
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Δεν καθορίζεται"
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt ""
+#| "KAboutData|replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>Η μετάφραση του KDE σε πολλές γλώσσες γίνεται με τη δουλειά των ομάδων "
+"μέτάφρασης σε όλον τον κόσμο.</p><p> Για περισσότερες πληροφορίες σχετικά με "
+"τη διεθνοποίηση του KDE επισκεφτείτε το <a href=\"http://l10n.kde.org"
+"\">http://l10n.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1165
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Εμφάνιση πληροφοριών για τον συγγραφέα."
+
+#: lib/kaboutdata.cpp:1166
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Εμφάνιση πληροφοριών άδειας χρήσης."
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+"Το κύριο όνομα αρχείου της καταχώρησης επιφάνειας εργασίας για αυτήν την "
+"εφαρμογή."
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "όνομα αρχείου"
+
+#: lib/kaboutdata.cpp:1178
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Αυτή η εφαρμογή γράφτηκε από κάποιον που θέλει να παραμείνει ανώνυμος."
+
+#: lib/kaboutdata.cpp:1180
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "Το %1 γράφτηκε από:"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgctxt "KAboutData CLI|"
+#| msgid "Please use http://bugs.kde.org to report bugs."
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr ""
+"Παρακαλώ χρησιμοποιήστε το http://bugs.kde.org για να αναφέρετε σφάλματα."
+
+#: lib/kaboutdata.cpp:1193
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Παρακαλώ αναφέρετε σφάλματα στο %1."
+
+#: lib/plugin/kpluginloader.cpp:122
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Η βιβλιοθήκη %1 δεν προσφέρει KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "πμ"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "μμ"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "πμ"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Kha"
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "π.μ."
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Μαι"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tir"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "μμ"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "μμ"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Επεξεργασία"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Υποβολή"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "πμ"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2.%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h%2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2m%3.%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 ημέρες"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 ώρες"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 λεπτά"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 δευτερόλεπτα"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n millisecond(s)"
+#| msgid_plural "%n millisecond(s)"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n χιλιοστό(α) του δευτερολέπτου"
+msgstr[1] "%n χιλιοστό(α) του δευτερολέπτου"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n day(s)"
+#| msgid_plural "%n day(s)"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n ημέρα(ες)"
+msgstr[1] "%n ημέρα(ες)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n hour(s)"
+#| msgid_plural "%n hour(s)"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n ώρα(ες)"
+msgstr[1] "%n ώρα(ες)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n minute(s)"
+#| msgid_plural "%n minute(s)"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n λεπτό(ά)"
+msgstr[1] "%n λεπτό(ά)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n second(s)"
+#| msgid_plural "%n second(s)"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n δευτερόλεπτo(α)"
+msgstr[1] "%n δευτερόλεπτo(α)"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 και %2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+#| msgid "Invalid item."
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Μη έγκυρο αντικείμενο."
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Αύριο"
+
+#: lib/util/kformatprivate.cpp:521
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Σήμερα"
+
+#: lib/util/kformatprivate.cpp:523
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Χθες"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+#| msgctxt "@option last month"
+#| msgid "Last Month"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Τελευταίος μήνας"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "Τρίτη"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Τετάρτη"
+
+#: lib/util/kformatprivate.cpp:535
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "Πέμπτη"
+
+#: lib/util/kformatprivate.cpp:537
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "Παρασκευή"
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "Σάββατο"
+
+#: lib/util/kformatprivate.cpp:541
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "Κυριακή"
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+#| msgctxt "@option next month"
+#| msgid "Next Month"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Επόμενος μήνας"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Τρίτη"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Τετάρτη"
+
+#: lib/util/kformatprivate.cpp:552
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "Πέμπτη"
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Παρασκευή"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Σάββατο"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Κυριακή"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Language: en\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+
+#: lib/kaboutdata.cpp:306
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr ""
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:356
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:360
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr ""
+
+#: lib/kaboutdata.cpp:361
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr ""
+
+#: lib/kaboutdata.cpp:364
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr ""
+
+#: lib/kaboutdata.cpp:365
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr ""
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr ""
+
+#: lib/kaboutdata.cpp:369
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr ""
+
+#: lib/kaboutdata.cpp:372
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:376
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:380
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr ""
+
+#: lib/kaboutdata.cpp:381
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr ""
+
+#: lib/kaboutdata.cpp:385
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr ""
+
+#: lib/kaboutdata.cpp:388
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr ""
+
+#: lib/kaboutdata.cpp:937
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1165
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1166
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1178
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1180
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1191
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1193
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr ""
+
+#: lib/plugin/kpluginloader.cpp:122
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr ""
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr ""
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr ""
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr ""
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr ""
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr ""
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr ""
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr ""
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr ""
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr ""
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr ""
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr ""
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr ""
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr ""
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr ""
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr ""
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr ""
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr ""
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr ""
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr ""
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr ""
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr ""
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr ""
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr ""
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr ""
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr ""
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr ""
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr ""
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n day(s)"
+#| msgid_plural "%n day(s)"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%n day"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n hour(s)"
+#| msgid_plural "%n hour(s)"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%n hour"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n minute(s)"
+#| msgid_plural "%n minute(s)"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%n minute"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n second(s)"
+#| msgid_plural "%n second(s)"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%n second"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n millisecond"
+msgstr[1] "%n milliseconds"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n day"
+msgstr[1] "%n days"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n hour"
+msgstr[1] "%n hours"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minute"
+msgstr[1] "%n minutes"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n second"
+msgstr[1] "%n seconds"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:509
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:521
+msgctxt "KFormat|"
+msgid "Today"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:523
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:529
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:531
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:533
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:539
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:546
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:548
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:550
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:554
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:556
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:558
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr ""
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr ""
--- /dev/null
+# translation of kdelibs4.po to British English
+# Malcolm Hunter <malcolm.hunter@gmx.co.uk>, 2002,2003,2004, 2005, 2006, 2007, 2008, 2009.
+# Jonathan Riddell <kde-en-gb@jriddell.org>, 2003.
+# Andrew Coles <andrew_coles@yahoo.co.uk>, 2004, 2005, 2009, 2010.
+# Steve Allewell <steve.allewell@gmail.com>, 2014, 2015, 2016, 2017, 2018.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2018-08-15 12:45+0100\n"
+"Last-Translator: Steve Allewell <steve.allewell@gmail.com>\n"
+"Language-Team: British English <kde-i18n-doc@kde.org>\n"
+"Language: en_GB\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Qt-Contexts: true\n"
+"X-Generator: Lokalize 2.0\n"
+
+#: lib/kaboutdata.cpp:296
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+
+#: lib/kaboutdata.cpp:306
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "This program is distributed under the terms of the %1."
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License Version 2"
+
+#: lib/kaboutdata.cpp:356
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public Licence Version 2"
+
+#: lib/kaboutdata.cpp:360
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD Licence"
+
+#: lib/kaboutdata.cpp:361
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD Licence"
+
+#: lib/kaboutdata.cpp:364
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artistic Licence"
+
+#: lib/kaboutdata.cpp:365
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artistic Licence"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public Licence"
+
+#: lib/kaboutdata.cpp:372
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public Licence Version 3"
+
+#: lib/kaboutdata.cpp:376
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public Licence Version 3"
+
+#: lib/kaboutdata.cpp:380
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:381
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public Licence Version 2.1"
+
+#: lib/kaboutdata.cpp:385
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Custom"
+
+#: lib/kaboutdata.cpp:388
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Not specified"
+
+#: lib/kaboutdata.cpp:937
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalisation visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+
+#: lib/kaboutdata.cpp:1165
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Show author information."
+
+#: lib/kaboutdata.cpp:1166
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Show licence information."
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "The base file name of the desktop entry for this application."
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "file name"
+
+#: lib/kaboutdata.cpp:1178
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr ""
+"This application was written by somebody who wants to remain anonymous."
+
+#: lib/kaboutdata.cpp:1180
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 was written by:"
+
+#: lib/kaboutdata.cpp:1191
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Please use https://bugs.kde.org to report bugs."
+
+#: lib/kaboutdata.cpp:1193
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Please report bugs to %1."
+
+#: lib/plugin/kpluginloader.cpp:122
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "The library %1 does not offer a KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "pm"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgctxt "Coptic month 4 - ShortName"
+#| msgid "Kia"
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Kia"
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "AM"
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "Ethiopian month 8 - ShortName"
+#| msgid "Miy"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Miy"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tir"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "Coptic weekday 4 - ShortDayName"
+#| msgid "Pti"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pti"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Edit"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Submit"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2.%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h%2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2m%3.%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 days"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 hours"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minutes"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 seconds"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n millisecond(s)"
+msgstr[1] "%n millisecond(s)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n day(s)"
+msgstr[1] "%n day(s)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n hour(s)"
+msgstr[1] "%n hour(s)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minute(s)"
+msgstr[1] "%n minute(s)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n second(s)"
+msgstr[1] "%n second(s)"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 and %2"
+
+#: lib/util/kformatprivate.cpp:509
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Invalid date"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Tomorrow"
+
+#: lib/util/kformatprivate.cpp:521
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Today"
+
+#: lib/util/kformatprivate.cpp:523
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Yesterday"
+
+#: lib/util/kformatprivate.cpp:529
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Last Monday"
+
+#: lib/util/kformatprivate.cpp:531
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "Last Tuesday"
+
+#: lib/util/kformatprivate.cpp:533
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Last Wednesday"
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "Last Thursday"
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "Last Friday"
+
+#: lib/util/kformatprivate.cpp:539
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "Last Saturday"
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "Last Sunday"
+
+#: lib/util/kformatprivate.cpp:546
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Next Monday"
+
+#: lib/util/kformatprivate.cpp:548
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Next Tuesday"
+
+#: lib/util/kformatprivate.cpp:550
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Next Wednesday"
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "Next Thursday"
+
+#: lib/util/kformatprivate.cpp:554
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Next Friday"
+
+#: lib/util/kformatprivate.cpp:556
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Next Saturday"
+
+#: lib/util/kformatprivate.cpp:558
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Next Sunday"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# translation of kdelibs4.po to Esperanto
+# Esperantaj mesaĝoj por "kdelibs"
+# Copyright (C) 1998,2002, 2003, 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+#
+# Minuskloj: ĉ ĝ ĵ ĥ ŝ ŭ Majuskloj: Ĉ Ĝ Ĵ Ĥ Ŝ Ŭ
+#
+# Wolfram Diestel <wolfram@steloj.de>, 1998.
+# Heiko Evermann <heiko@evermann.de>, 2002, 2003.
+# Matthias Peick <matthias@peick.de>, 2004, 2005.
+# Oliver Kellogg <okellogg@users.sourceforge.net>,2007.
+# Cindy McKee <cfmckee@gmail.com>, 2007, 2008.
+# Axel Rousseau <axel@esperanto-jeunes.org>, 2009.
+# Michael Moroni <michael.moroni@mailoo.org>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2012-05-22 12:30+0200\n"
+"Last-Translator: Michael Moroni <michael.moroni@mailoo.org>\n"
+"Language-Team: Esperanto <kde-i18n-doc@kde.org>\n"
+"Language: eo\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.4\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Ne estas donitaj informoj pri permesilo por tiu programo.\n"
+"Bonvolu trarigardi la dokumentaron aŭ la fonttekstojn\n"
+"de la programo pri permesilo.\n"
+
+#: lib/kaboutdata.cpp:306
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Tiu programo estas distribuata laŭ kondiĉoj de la %1."
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU Ĝenerala Publika Permesilo Versio 2"
+
+#: lib/kaboutdata.cpp:356
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Ĝenerala Publika Permesilo Versio 2"
+
+#: lib/kaboutdata.cpp:360
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD-Permesilo"
+
+#: lib/kaboutdata.cpp:361
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD-Permesilo"
+
+#: lib/kaboutdata.cpp:364
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artista Permesilo"
+
+#: lib/kaboutdata.cpp:365
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artista Permesilo"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Publika Permesilo"
+
+#: lib/kaboutdata.cpp:372
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU Ĝenerala Publika Permesilo Versio 3"
+
+#: lib/kaboutdata.cpp:376
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Ĝenerala Publika Permesilo Versio 3"
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgctxt "KAboutLicense|@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:381
+#, fuzzy
+#| msgctxt "KAboutLicense|@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Ĝenerala Publika Permesilo Versio 2"
+
+#: lib/kaboutdata.cpp:385
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Propra"
+
+#: lib/kaboutdata.cpp:388
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Ne specifita"
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt ""
+#| "KAboutData|replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE estas tradukita al multaj lingvoj, danke al la laboro de la tradukaj "
+"teamoj ĉie en la mondo.</p><p>Por detalaj informoj pri KDE-tradukado vizitu "
+"<a href=\"http://l10n.kde.org\">http://l10n.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1165
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Montri aŭtorinformon"
+
+#: lib/kaboutdata.cpp:1166
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Montri permesilo-informon"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1178
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Tiu aplikaĵo estis skribita de iu, kiu volas resti anonima."
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "KAboutData CLI|"
+#| msgid "%s was written by:\n"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%s estas skribita de:\n"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgctxt "KAboutData CLI|"
+#| msgid "Please use http://bugs.kde.org to report bugs."
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Bonvole uzu http://bugs.kde.org por la raporto de cimoj."
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+#| msgctxt "KAboutData CLI|"
+#| msgid "Please report bugs to %s.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Bonvole uzu %s por la raporto de cimoj.\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "La biblioteko %1 ne provizas KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "pm"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "AM"
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "@action"
+#| msgid "Mail"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Retmesaĝo"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "@item Text character set"
+#| msgid "Thai"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Taja"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Redakti"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Sendi"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2m%3.%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 tagoj"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 horoj"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minutoj"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 sekundoj"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n millisecond(s)"
+#| msgid_plural "%n millisecond(s)"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n milisekundo"
+msgstr[1] "%n milisekundo"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n day(s)"
+#| msgid_plural "%n day(s)"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n tago"
+msgstr[1] "%n tago"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n hour(s)"
+#| msgid_plural "%n hour(s)"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n horo"
+msgstr[1] "%n horo"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n minute(s)"
+#| msgid_plural "%n minute(s)"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minuto"
+msgstr[1] "%n minuto"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n second(s)"
+#| msgid_plural "%n second(s)"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n sekundo"
+msgstr[1] "%n sekundo"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 kaj %2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+#| msgid "Invalid item."
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Nevalida ero."
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Morgaŭ"
+
+#: lib/util/kformatprivate.cpp:521
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Hodiaŭ"
+
+#: lib/util/kformatprivate.cpp:523
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Hieraŭ"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+#| msgctxt "@option last month"
+#| msgid "Last Month"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Lasta monato"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+#| msgctxt "@option last year"
+#| msgid "Last Year"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "Lasta jaro"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+#| msgctxt ""
+#| "referring to a filter on the modification and usage date of files/"
+#| "resources"
+#| msgid "Last Week"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Lasta semajno"
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+#| msgctxt "@option last year"
+#| msgid "Last Year"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "Lasta jaro"
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+#| msgctxt "@option next month"
+#| msgid "Next Month"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Sekva monato"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Sekva jaro"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+#| msgctxt "@option next week"
+#| msgid "Next Week"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Sekva semajno"
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Sekva jaro"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Sekva jaro"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Sekva jaro"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# translation of kdelibs4.po to Spanish
+# Translation of kdelibs4 to Spanish
+# Copyright (C) 2000-2007
+#
+# Pablo de Vicente <vicente@oan.es>, 2000-2002,2003, 2004.
+# Pablo de Vicente <vicnte@oan.es>, 2003.
+# Pablo de Vicente <p.devicente@wanadoo.es>, 2004, 2005.
+# Eloy Cuadra <ecuadra@eloihr.net>, 2005, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018.
+# Pablo de Vicente <pablo.devicente@gmail.com>, 2005, 2006, 2007.
+# Enrique Matias Sanchez (aka Quique) <cronopios@gmail.com>, 2007.
+# Jaime Robles <jaime@kde.org>, 2007.
+# Javier Viñal <fjvinal@gmail.com>, 2013.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2018-12-09 21:57+0100\n"
+"Last-Translator: Eloy Cuadra <ecuadra@eloihr.net>\n"
+"Language-Team: Spanish <kde-l10n-es@kde.org>\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"First-Translator: Boris Wesslowski <Boris@Wesslowski.com>\n"
+"X-Generator: Lokalize 2.0\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"No se han indicado los términos de la licencia de este programa.\n"
+"Por favor, consulte la documentación o el código fuente para ver\n"
+"los términos de la licencia.\n"
+
+#: lib/kaboutdata.cpp:306
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Este programa se distribuye bajo los términos de la %1."
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "Licencia Pública General de GNU, versión 2"
+
+#: lib/kaboutdata.cpp:356
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "Licencia Pública General Menor de GNU, versión 2"
+
+#: lib/kaboutdata.cpp:360
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Licencia BSD"
+
+#: lib/kaboutdata.cpp:361
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Licencia BSD"
+
+#: lib/kaboutdata.cpp:364
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Licencia Artística"
+
+#: lib/kaboutdata.cpp:365
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Licencia Artística"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Licencia Pública Q"
+
+#: lib/kaboutdata.cpp:372
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "Licencia Pública General de GNU, versión 3"
+
+#: lib/kaboutdata.cpp:376
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "Licencia Pública General Menor de GNU, versión 3"
+
+#: lib/kaboutdata.cpp:380
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:381
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "Licencia Pública General Menor de GNU, versión 2.1"
+
+#: lib/kaboutdata.cpp:385
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Personalizada"
+
+#: lib/kaboutdata.cpp:388
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "No especificada"
+
+#: lib/kaboutdata.cpp:937
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE se traduce a muchos idiomas gracias al trabajo de equipos de "
+"traducción de todo el mundo.</p><p>Para más información sobre la "
+"internacionalización de KDE, visite <a href=\"https://l10n.kde.org\">https://"
+"l10n.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1165
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Muestra información sobre el autor."
+
+#: lib/kaboutdata.cpp:1166
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Muestra información sobre la licencia."
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+"El nombre de archivo base de la entrada de escritorio para esta aplicación."
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "nombre de archivo"
+
+#: lib/kaboutdata.cpp:1178
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Esta aplicación fue escrita por alguien que quiere permanecer anónimo."
+
+#: lib/kaboutdata.cpp:1180
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 fue escrito por:"
+
+#: lib/kaboutdata.cpp:1191
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Por favor, use https://bugs.kde.org para informar de fallos."
+
+#: lib/kaboutdata.cpp:1193
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Por favor, informe de fallos a %1."
+
+#: lib/plugin/kpluginloader.cpp:122
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "La biblioteca %1 no ofrece ninguna KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "y"
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "z"
+
+#: lib/util/kformatprivate.cpp:118
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "a"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "f"
+
+#: lib/util/kformatprivate.cpp:120
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "p"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "µ"
+
+#: lib/util/kformatprivate.cpp:123
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "k"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Ki"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "M"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mi"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Gi"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "T"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ti"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pi"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "E"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ei"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "Z"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Zi"
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:140
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "bit"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B"
+
+#: lib/util/kformatprivate.cpp:146
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Hz"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2.%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h%2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2m%3.%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 días"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 horas"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minutos"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 segundos"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n milisegundo"
+msgstr[1] "%n milisegundos"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n día"
+msgstr[1] "%n días"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n hora"
+msgstr[1] "%n horas"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minuto"
+msgstr[1] "%n minutos"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n segundo"
+msgstr[1] "%n segundos"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 y %2"
+
+#: lib/util/kformatprivate.cpp:509
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Fecha no válida"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Mañana"
+
+#: lib/util/kformatprivate.cpp:521
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Hoy"
+
+#: lib/util/kformatprivate.cpp:523
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Ayer"
+
+#: lib/util/kformatprivate.cpp:529
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Último lunes"
+
+#: lib/util/kformatprivate.cpp:531
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "Último martes"
+
+#: lib/util/kformatprivate.cpp:533
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Último miércoles"
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "Último jueves"
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "Último viernes"
+
+#: lib/util/kformatprivate.cpp:539
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "Último sábado"
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "Último domingo"
+
+#: lib/util/kformatprivate.cpp:546
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Próximo lunes"
+
+#: lib/util/kformatprivate.cpp:548
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Próximo martes"
+
+#: lib/util/kformatprivate.cpp:550
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Próximo miércoles"
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "Próximo jueves"
+
+#: lib/util/kformatprivate.cpp:554
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Próximo viernes"
+
+#: lib/util/kformatprivate.cpp:556
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Próximo sábado"
+
+#: lib/util/kformatprivate.cpp:558
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Próximo domingo"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# translation of kdelibs4.po to Estonian
+# Copyright (C) 1999-2004, 2005, 2006, 2009 Free Software Foundation, Inc.
+#
+# Hasso Tepper <hasso@kde.org>, 1999-2004, 2005, 2006.
+# Marek Laane <bald@smail.ee>, 2003-2009.
+# Peeter Russak <pezz@tkwcy.ee>, 2005.
+# Marek Laane <bald@smail.ee>, 2009, 2010, 2011, 2012, 2014, 2016.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2016-09-09 01:28+0300\n"
+"Last-Translator: Marek Laane <qiilaq69@gmail.com>\n"
+"Language-Team: Estonian <kde-i18n-doc@kde.org>\n"
+"Language: et\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.5\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Sellele rakendusele pole litsentsitingimusi määratud.\n"
+"Täpsema info saamiseks vaata dokumentatsiooni või\n"
+"lähteteksti faile.\n"
+
+#: lib/kaboutdata.cpp:306
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr ""
+"Seda rakendust levitatakse vastavalt %1 litsentsis toodud tingimustele."
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU Üldine Avalik Litsents, versioon 2"
+
+#: lib/kaboutdata.cpp:356
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Vähem Üldine Avalik Litsents, versioon 2"
+
+#: lib/kaboutdata.cpp:360
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD litsents"
+
+#: lib/kaboutdata.cpp:361
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD litsents"
+
+#: lib/kaboutdata.cpp:364
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artistic litsents"
+
+#: lib/kaboutdata.cpp:365
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artistic litsents"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Avalik litsents"
+
+#: lib/kaboutdata.cpp:372
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU Üldine Avalik Litsents, versioon 3"
+
+#: lib/kaboutdata.cpp:376
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Vähem Üldine Avalik Litsents, versioon 3"
+
+#: lib/kaboutdata.cpp:380
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:381
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Vähem Üldine Avalik Litsents, versioon 2.1"
+
+#: lib/kaboutdata.cpp:385
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Kohandatud"
+
+#: lib/kaboutdata.cpp:388
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Pole määratud"
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt ""
+#| "KAboutData|replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>Tänu tõlkemeeskondade tööle üle kogu maailma on KDE tõlgitud paljudesse "
+"keeltesse.</p> <p>KDE tõlkimise kohta täpsema info saamiseks külasta "
+"lehekülge <a href=\"http://l10n.kde.org\">http://l10n.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1165
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Teabe näitamine autori kohta."
+
+#: lib/kaboutdata.cpp:1166
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Litsentsi näitamine."
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Rakenduse töölauafaili baasfailinimi."
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "failinimi"
+
+#: lib/kaboutdata.cpp:1178
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Selle rakenduse on kirjutanud keegi, kes soovib jääda anonüümseks."
+
+#: lib/kaboutdata.cpp:1180
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 on kirjutanud:"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgctxt "KAboutData CLI|"
+#| msgid "Please use http://bugs.kde.org to report bugs."
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Palun kasuta vigadest teatamiseks aadressi http://bugs.kde.org."
+
+#: lib/kaboutdata.cpp:1193
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Palun kasuta vigadest teatamiseks aadressi %1."
+
+#: lib/plugin/kpluginloader.cpp:122
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Teek %1 ei paku KPluginFactory't."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "pm"
+
+#: lib/util/kformatprivate.cpp:121
+#, fuzzy
+#| msgid "On"
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "Sees"
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Ok"
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "OK"
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgctxt "Coptic month 4 - ShortName"
+#| msgid "Kia"
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Kia"
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "e.l."
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "Ethiopian month 8 - ShortName"
+#| msgid "Miy"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Miy"
+
+#: lib/util/kformatprivate.cpp:127
+#, fuzzy
+#| msgid "G:"
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G:"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tir"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "p.l."
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "Coptic weekday 4 - ShortDayName"
+#| msgid "Pti"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pti"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Muuda"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+#, fuzzy
+#| msgctxt "QFont"
+#| msgid "Yi"
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:132
+#, fuzzy
+#| msgctxt "QFont"
+#| msgid "Yi"
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Saada"
+
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy
+#| msgid "B:"
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B:"
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m %2,%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m %2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1t %2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1t %2m %3,%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1t %2m %3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2,%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3,%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 päeva"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 tundi"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minutit"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 sekundit"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n millisecond(s)"
+#| msgid_plural "%n millisecond(s)"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n millisekund(it)"
+msgstr[1] "%n millisekund(it)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n day(s)"
+#| msgid_plural "%n day(s)"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n päev(a)"
+msgstr[1] "%n päev(a)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n hour(s)"
+#| msgid_plural "%n hour(s)"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n tund(i)"
+msgstr[1] "%n tund(i)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n minute(s)"
+#| msgid_plural "%n minute(s)"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minut(it)"
+msgstr[1] "%n minut(it)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n second(s)"
+#| msgid_plural "%n second(s)"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n sekund(it)"
+msgstr[1] "%n sekund(it)"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 ja %2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+#| msgid "Invalid item."
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Vigased element"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Homme"
+
+#: lib/util/kformatprivate.cpp:521
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Täna"
+
+#: lib/util/kformatprivate.cpp:523
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Eile"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+#| msgctxt "@option last month"
+#| msgid "Last Month"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Eelmine kuu"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "teisipäev"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "kolmapäev"
+
+#: lib/util/kformatprivate.cpp:535
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "neljapäev"
+
+#: lib/util/kformatprivate.cpp:537
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "reede"
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "laupäev"
+
+#: lib/util/kformatprivate.cpp:541
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "pühapäev"
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+#| msgctxt "@option next month"
+#| msgid "Next Month"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Järgmine kuu"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "teisipäev"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "kolmapäev"
+
+#: lib/util/kformatprivate.cpp:552
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "neljapäev"
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "reede"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "laupäev"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "pühapäev"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# Translation of kcoreaddons5_qt.po to Euskara/Basque (eu)
+# Copyright (C) 1999-2018, Free Software Foundation.
+# This file is distributed under the same license as the frameworks package.
+# KDE Euskarateko proiektuaren arduraduna <xalba@euskalnet.net>.
+#
+# Translators:
+# Marcos <marcos@euskalgnu.org>, 2002,2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010.
+# Ion Gaztañaga <igaztanaga@gmail.com>, 2005.
+# Iñaki Larrañaga Murgoitio <dooteo@euskalgnu.org>, 2009.
+# Iñigo Salvador Azurmendi <xalba@euskalnet.net>, 2010, 2011, 2012, 2013, 2014, 2017, 2018.
+msgid ""
+msgstr ""
+"Project-Id-Version: kcoreaddons5_qt\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2018-07-15 11:58+0100\n"
+"Last-Translator: Iñigo Salvador Azurmendi <xalba@euskalnet.net>\n"
+"Language-Team: Basque <kde-i18n-doc@kde.org>\n"
+"Language: eu\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 2.0\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Programa honentzako ez da lizentzia baldintzarik zehaztu.\n"
+"Aztertu dokumentazioa edo iturburua lizentzia baldintza\n"
+"bila.\n"
+
+#: lib/kaboutdata.cpp:306
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Programa hau %1 lizentziapean banatzen da."
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr ""
+"GNU General Public License Version 2 - GNUren Lizentzia Publiko Orokorraren "
+"2. bertsioa"
+
+#: lib/kaboutdata.cpp:356
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr ""
+"GNU Lesser General Public License Version 2 - GNUren Lizentzia Publiko Ez "
+"hain Orokorraren 2. bertsioa"
+
+#: lib/kaboutdata.cpp:360
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD lizentzia"
+
+#: lib/kaboutdata.cpp:361
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD lizentzia"
+
+#: lib/kaboutdata.cpp:364
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artistic License - Lizentzia Artistikoa"
+
+#: lib/kaboutdata.cpp:365
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artistic License - Lizentzia Artistikoa"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public License - Q lizentzia publikoa"
+
+#: lib/kaboutdata.cpp:372
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr ""
+"GNU General Public License Version 3 - GNUren Lizentzia Publiko Orokorraren "
+"3. bertsioa"
+
+#: lib/kaboutdata.cpp:376
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr ""
+"GNU Lesser General Public License Version 3 - GNUren Lizentzia Publiko Ez "
+"hain Orokorraren 3. bertsioa"
+
+#: lib/kaboutdata.cpp:380
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:381
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr ""
+"GNU Lesser General Public License Version 2.1 - GNUren Lizentzia Publiko Ez "
+"hain Orokorraren 2.1 bertsioa"
+
+#: lib/kaboutdata.cpp:385
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Pertsonalizatua"
+
+#: lib/kaboutdata.cpp:388
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Zehaztu gabe"
+
+#: lib/kaboutdata.cpp:937
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE hizkuntza askotara itzulita dago mundu osoko itzulpen-taldeen "
+"laguntzari esker.</p><p>KDEren nazioartekotzeari buruz gehiago jakiteko "
+"bisitatu <a href=\"http://l10n.kde.org\">http://l10n.kde.org</a></p> <p>KDE "
+"Euskaratzeko proiektuaren inguruko informazioa eskuratuko duzu <a href="
+"\"https://l10n.kde.org/team-infos.php?teamcode=eu\">hemen</a>. Etorkizun "
+"hurbilean informazioa hobetzea gure asmoen artean dago.</p>"
+
+#: lib/kaboutdata.cpp:1165
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Erakutsi egileari buruzko informazioa."
+
+#: lib/kaboutdata.cpp:1166
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Erakutsi lizentziari buruzko informazioa."
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Aplikazio honentzako mahaigain-sarreraren oinarri fitxategi-izena."
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "Fitxategi-izena"
+
+#: lib/kaboutdata.cpp:1178
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr ""
+"Aplikazio hau bere burua anonimo gisa mantendu nahi duen batek idatzi zuen."
+
+#: lib/kaboutdata.cpp:1180
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 honek idatzi zuen:"
+
+#: lib/kaboutdata.cpp:1191
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Erabili http://bugs.kde.org akatsen berri emateko."
+
+#: lib/kaboutdata.cpp:1193
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Akatsen berri eman %1(e)ra."
+
+#: lib/plugin/kpluginloader.cpp:122
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "%1 liburutegiak ez du KPluginFactory bat eskaintzen."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "pm"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "AM"
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "@action"
+#| msgid "Mail"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Bidali postaz"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "@item Text character set"
+#| msgid "Thai"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Thailandiera"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Editatu"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Bidali"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1 m %2,%3 s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1 m %2 s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1 h %2 m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1 h %2 m %3,%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1 h %2 m %3 s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2,%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3,%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 egun"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 ordu"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minutu"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 segundo"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "milisegundo %n"
+msgstr[1] "%n milisegundo"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "egun %n"
+msgstr[1] "%n egun"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "ordu %n"
+msgstr[1] "%n ordu"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "minutu %n"
+msgstr[1] "%n minutu"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "segundo %n"
+msgstr[1] "%n segundo"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 eta %2"
+
+#: lib/util/kformatprivate.cpp:509
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Data baliogabea"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Bihar"
+
+#: lib/util/kformatprivate.cpp:521
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Gaur"
+
+#: lib/util/kformatprivate.cpp:523
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Atzo"
+
+#: lib/util/kformatprivate.cpp:529
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Aurreko astelehena"
+
+#: lib/util/kformatprivate.cpp:531
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "Aurreko asteartea"
+
+#: lib/util/kformatprivate.cpp:533
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Aurreko asteazkena"
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "Aurreko osteguna"
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "Aurreko ostirala"
+
+#: lib/util/kformatprivate.cpp:539
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "Aurreko larunbata"
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "Aurreko igandea"
+
+#: lib/util/kformatprivate.cpp:546
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Datorren astelehena"
+
+#: lib/util/kformatprivate.cpp:548
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Datorren asteartea"
+
+#: lib/util/kformatprivate.cpp:550
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Datorren asteazkena"
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "Datorren osteguna"
+
+#: lib/util/kformatprivate.cpp:554
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Datorren ostirala"
+
+#: lib/util/kformatprivate.cpp:556
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Datorren larunbata"
+
+#: lib/util/kformatprivate.cpp:558
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Datorren igandea"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# translation of kdelibs4.po to Persian
+# Nazanin Kazemi <kazemi@itland.ir>, 2006, 2007.
+# Mahdi Foladgar <foladgar@itland.ir>, 2006.
+# Nasim Daniarzadeh <daniarzadeh@itland.ir>, 2006, 2007.
+# Tahereh Dadkhahfar <dadkhahfar@itland.ir>, 2006.
+# MaryamSadat Razavi <razavi@itland.ir>, 2007.
+# Nooshin Asiaie <asiaie@itland.ir>, 2007.
+# Mohamad Reza Mirdamadi <mohi@linuxshop.ir>, 2009, 2010, 2011, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2012-06-28 16:40+0430\n"
+"Last-Translator: Mohammad Reza Mirdamadi <mohi@linuxshop.ir>\n"
+"Language-Team: Farsi (Persian) <kde-i18n-fa@kde.org>\n"
+"Language: fa\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.4\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"برای این برنامه، اصطلاحات مربوط به مجوز مشخص نشده است.\n"
+"لطفاً، برای هر اصطلاح مربوط به جواز،\n"
+"مستندات یا متن را بررسی کنید.\n"
+
+#: lib/kaboutdata.cpp:306
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "این برنامه تحت اصطلاحات %1 توزیع میشود."
+
+# GPL
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+# GNU General Public License Version 2
+#: lib/kaboutdata.cpp:353
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "مجوز عمومی GNU نسخهٔ ۲"
+
+# LGPL
+#: lib/kaboutdata.cpp:356
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU مجوز کمتر عمومی گنو نسخه ۲"
+
+# BSD License
+#: lib/kaboutdata.cpp:360
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "مجوز BSD"
+
+# BSD License
+#: lib/kaboutdata.cpp:361
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "مجوز BSD"
+
+# Artistic License
+#: lib/kaboutdata.cpp:364
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "مجوز Artistic"
+
+# Artistic License
+#: lib/kaboutdata.cpp:365
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "مجوز Artistic"
+
+#: lib/kaboutdata.cpp:368
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL نسخه۱.۰"
+
+# Q Public License
+#: lib/kaboutdata.cpp:369
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "مجوز عمومی Q"
+
+# GPL
+#: lib/kaboutdata.cpp:372
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU مجوز عمومی گنو نسخه ۳"
+
+# LGPL
+#: lib/kaboutdata.cpp:376
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU مجوز کمتر عمومی گنو نسخه ۳"
+
+# LGPL
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:381
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU مجوز کمتر عمومی گنو نسخه ۲"
+
+# Custom
+#: lib/kaboutdata.cpp:385
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "سفارشی"
+
+# Not specified
+#: lib/kaboutdata.cpp:388
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "نامعین"
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>کیدیای به لطف همکاری تیمهای بومیسازی در تمام دنیا ترجمه و بومیسازی میشود."
+"</p><p>برای اطلاعات بیشتر در مورد بینالمللی سازی <a href=\"http://l10n.kde."
+"org\">http://l10n.kde.org</a> راببینید.</p><p> تیم فارسیسازی کیدیای هم همگام "
+"با دیگر تیمها و به صورت کاملا داوطلبانه به بومیسازی و ترجمه این محیط "
+"میپردازد. شما هم میتوانید به این تیم بپیوندید. صفحه رسمی تیم را ببینید: <a "
+"href=\"http://l10n.kde.org/team-infos.php?teamcode=fa\">http://l10n.kde.org/"
+"teaminfos.php?teamcode=fa</a></p><p> با وجود دقت زیاد در بررسی ترجمهها، آنها "
+"ممکن است با کمبودهایی همراه باشند. در صورت وجود اشکال در ترجمهها یا برای "
+"پیشنهادات و یا اطلاعات بیشتر با آدرس mohi@linuxshop.ir<email>mohi@linuxshop."
+"ir</email> تماس بگیرید.</p>"
+
+#: lib/kaboutdata.cpp:1165
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "نمایش اطلاعات نویسنده"
+
+#: lib/kaboutdata.cpp:1166
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "نمایش اطلاعات مجوز"
+
+#: lib/kaboutdata.cpp:1168
+#, fuzzy
+#| msgid "Please choose language which should be used for this application:"
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "لطفاً زبانی را که باید برای این کاربردنامه استفاده شود را برگزینید:"
+
+#: lib/kaboutdata.cpp:1169
+#, fuzzy
+#| msgid "Filename Error"
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "خطای نام پرونده"
+
+#: lib/kaboutdata.cpp:1178
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "این کاربرد توسط فردی نوشته شده که خواسته ناشناس باقی بماند"
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 توسط \n"
+"%2 نوشته شد"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "لطفاً، از http://bugs.kde.org برای گزارش اشکالها استفاده کنید.\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "لطفاً، خطاها را به %1 گزارش کنید.\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "کتابخانه %1 کارخانه همساز KDE 4 را ارائه نمیکند."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "قبل از ظهر"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "بعد از ظهر"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "قبل از ظهر"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "پنجشنبه"
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "AM"
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "مه"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "تیر"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "ویرایش"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "ارائه"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "قبل از ظهر"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+# %1 %2
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2، %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 بایت"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 کیلو بایت"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 مگابایت"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 گیگابایت"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 ترابایت"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 بایت"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, fuzzy, qt-format
+#| msgctxt "memory size in 1024 bytes"
+#| msgid "%1 KB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 کیلوبایت"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 مگابایت"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 گیگابایت"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 ترابایت"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 بایت"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, fuzzy, qt-format
+#| msgctxt "size in 1024 bytes"
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, fuzzy, qt-format
+#| msgctxt "size in 2^20 bytes"
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "گیبیبایت"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, fuzzy, qt-format
+#| msgctxt "size in 2^50 bytes"
+#| msgid "%1 PiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, fuzzy, qt-format
+#| msgctxt "size in 2^60 bytes"
+#| msgid "%1 EiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, fuzzy, qt-format
+#| msgctxt "size in 2^70 bytes"
+#| msgid "%1 ZiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, fuzzy, qt-format
+#| msgctxt "size in 2^80 bytes"
+#| msgid "%1 YiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 روز"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 ساعت"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 دقیقه"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 ثانیه"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 میلیثانیه"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 روز"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 ساعت"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 دقیقه"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 ثانیه"
+
+# %1 %2
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 و %2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "نام پروندههای نامعتبر"
+
+#: lib/util/kformatprivate.cpp:519
+#, fuzzy
+#| msgctxt "@option tomorrow"
+#| msgid "Tomorrow"
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "فردا"
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "امروز"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "دیروز"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+#| msgctxt "@option last month"
+#| msgid "Last Month"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "ماه پیش"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "سهشنبه"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "چهارشنبه"
+
+#: lib/util/kformatprivate.cpp:535
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "پنجشنبه"
+
+#: lib/util/kformatprivate.cpp:537
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "جمعه"
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "شنبه"
+
+#: lib/util/kformatprivate.cpp:541
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "یکشنبه"
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+#| msgctxt "@option next month"
+#| msgid "Next Month"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "ماه بعد"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "سهشنبه"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "چهارشنبه"
+
+#: lib/util/kformatprivate.cpp:552
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "پنجشنبه"
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "جمعه"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "شنبه"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "یکشنبه"
+
+# %1 %2
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "%1 is 'the slot asked for foo arguments', %2 is 'but there are only bar "
+#| "available'"
+#| msgid "%1, %2."
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1، %2."
--- /dev/null
+# Finnish messages for kdelibs4.
+# Copyright © 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 This_file_is_part_of_KDE
+# This file is distributed under the same license as the kdelibs package.
+# Kim Enkovaara <kim.enkovaara@iki.fi>, 2002,2003, 2005, 2006, 2007.
+# Tapio Kautto <eleknader@phnet.fi>, 2003, 2004.
+# Mikko Ikola <kola@netikka.fi>, 2003.
+# Teemu Rytilahti <teemu.rytilahti@d5k.net>, 2003, 2008.
+# Mikko Ikola <ikola@iki.fi>, 2003.
+# Teemu Rytilahti <teemu.rytilahti@kde-fi.org>, 2003, 2004, 2008.
+# Niklas Laxström <niklas.laxstrom+kdetrans@gmail.com>, 2006, 2007.
+# Joonas Niilola <juippis@roskakori.org>, 2006.
+# Mikko Piippo <piippo@cc.helsinki.fi>, 2007.
+# Teemu Rytilahti <tpr@d5k.net>, 2008.
+# Tommi Nieminen <translator@legisign.org>, 2009, 2010, 2011.
+# Tommi Nieminen <tommi.nieminen@legisign.org>, 2009, 2017, 2018.
+# Jorma Karvonen <karvonen.jorma@gmail.com>, 2010.
+# Lasse Liehu <lasse.liehu@gmail.com>, 2006, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017.
+#
+# KDE Finnish translation sprint participants:
+# Author: Artnay
+# Author: Jl
+# Author: Lliehu
+# Author: Niklas Laxström
+# Author: Suhviksi
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2018-08-02 11:18+0200\n"
+"Last-Translator: Tommi Nieminen <translator@legisign.org>\n"
+"Language-Team: Finnish <kde-i18n-doc@kde.org>\n"
+"Language: fi\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Lokalize 2.0\n"
+"X-POT-Import-Date: 2013-01-13 20:43:21+0000\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Ohjelmalle ei ole määritelty lisenssiä.\n"
+"Tarkista mahdolliset lisenssiehdot ohjeista tai lähdekoodista.\n"
+
+#: lib/kaboutdata.cpp:306
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Tätä ohjelmaa levitetään %1 -lisenssin mukaisesti."
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License (GPL), versio 2"
+
+#: lib/kaboutdata.cpp:356
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License (LGPL), versio 2"
+
+#: lib/kaboutdata.cpp:360
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD-lisenssi"
+
+#: lib/kaboutdata.cpp:361
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD License"
+
+#: lib/kaboutdata.cpp:364
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artistic-lisenssi"
+
+#: lib/kaboutdata.cpp:365
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artistic License"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public License"
+
+#: lib/kaboutdata.cpp:372
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License (GPL), versio 3"
+
+#: lib/kaboutdata.cpp:376
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License (LGPL), versio 3"
+
+#: lib/kaboutdata.cpp:380
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:381
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License (LGPL), versio 2.1"
+
+#: lib/kaboutdata.cpp:385
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Oma"
+
+#: lib/kaboutdata.cpp:388
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Ei määritelty"
+
+#: lib/kaboutdata.cpp:937
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>Jos haluat ilmoittaa käännösvirheestä, ehdottaa parannusta tai osallistua "
+"suomentamiseen, katso suomennosryhmän sivut osoitteessa <a href=\"https://"
+"community.kde.org/KDE_Localization/fi\">community.kde.org/KDE_Localization/"
+"fi</a>.</p>"
+
+#: lib/kaboutdata.cpp:1165
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Näytä tekijätiedot."
+
+#: lib/kaboutdata.cpp:1166
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Näytä lisenssitiedot."
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Tämän sovelluksen desktop-tietueen tiedostonimi."
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "tiedostonimi"
+
+#: lib/kaboutdata.cpp:1178
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Tekijä haluaa pysyä tuntemattomana."
+
+#: lib/kaboutdata.cpp:1180
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "Tekijät – %1:"
+
+#: lib/kaboutdata.cpp:1191
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Ilmoita vioista osoitteessa https://bugs.kde.org."
+
+#: lib/kaboutdata.cpp:1193
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Ilmoita vioista osoitteeseen %1."
+
+#: lib/plugin/kpluginloader.cpp:122
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Kirjasto %1 ei tarjoa KPluginFactoryä."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "ap."
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "ip."
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "ap."
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+# ”ap.” on CSC:n (Tieteen tietotekniikan keskus) alaisen kotoistushankkeen (kotoistus.fi) suositus. Toisaalta ”AM” voi silti olla parempi. Ehdotuksia?
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "ap."
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "@action"
+#| msgid "Mail"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Lähetä"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tir"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Muokkaa"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Lähetä"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "ap."
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 t"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kt"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 Mt"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 Gt"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 Tt"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 Pt"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 Et"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 Zt"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 Yt"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 t"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 kt"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 Mt"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 Gt"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 Tt"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 Pt"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 Et"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 Zt"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 Yt"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1 min %2,%3 s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1 min %2 s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1 h %2 min"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1 h %2 min %3,%4 s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1 h %2 min %3 s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1.%2,%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1.%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1.%2.%3,%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1.%2.%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 päivää"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 tuntia"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minuuttia"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 sekuntia"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n millisekunti"
+msgstr[1] "%n millisekuntia"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n päivä"
+msgstr[1] "%n päivää"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n tunti"
+msgstr[1] "%n tuntia"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minuutti"
+msgstr[1] "%n minuuttia"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n sekunti"
+msgstr[1] "%n sekuntia"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 %2"
+
+#: lib/util/kformatprivate.cpp:509
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Virheellinen päiväys"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Huomenna"
+
+#: lib/util/kformatprivate.cpp:521
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Tänään"
+
+#: lib/util/kformatprivate.cpp:523
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Eilen"
+
+#: lib/util/kformatprivate.cpp:529
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Viime maanantai"
+
+#: lib/util/kformatprivate.cpp:531
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "Viime tiistai"
+
+#: lib/util/kformatprivate.cpp:533
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Viime keskiviikko"
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "Viime torstai"
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "Viime perjantai"
+
+#: lib/util/kformatprivate.cpp:539
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "Viime lauantai"
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "Viime sunnuntai"
+
+#: lib/util/kformatprivate.cpp:546
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Ensi maanantai"
+
+#: lib/util/kformatprivate.cpp:548
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Ensi tiistai"
+
+#: lib/util/kformatprivate.cpp:550
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Ensi keskiviikko"
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "Ensi torstai"
+
+#: lib/util/kformatprivate.cpp:554
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Ensi perjantai"
+
+#: lib/util/kformatprivate.cpp:556
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Ensi lauantai"
+
+#: lib/util/kformatprivate.cpp:558
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Ensi sunnuntai"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# translation of kdelibs4.po to Français
+# translation of kdelibs4.po to
+# Matthieu Robin <kde@macolu.org>, 2002,2003, 2004.
+# Robert Jacolin <rjacolin@ifrance.com>, 2003,2004.
+# Gilles Caulier <caulier.gilles@free.fr>, 2003.
+# Gérard Delafond <gerard@delafond.org>, 2003, 2004.
+# Matthieu Robin <kde@macolu.org>, 2004, 2005, 2006.
+# Cedric Pasteur <cedric.pasteur@free.fr>, 2004.
+# Nicolas Ternisien <nicolas.ternisien@gmail.com>, 2004, 2005, 2006, 2007, 2008.
+# Matthieu Robin <matthieu@macolu.org>, 2005.
+# Éric Bischoff <ebischoff@nerim.net>, 2005.
+# Sébastien Renard <Sebastien.Renard@digitalfox.org>, 2006, 2007, 2008.
+# Anne-Marie Mahfouf <annma@kde.org>, 2007, 2008, 2012.
+# Ludovic Grossard <grossard@kde.org>, 2008.
+# Mickael Sibelle <kimael@gmail.com>, 2008.
+# Nicolas Lécureuil <nlecureuil@mandriva.com>, 2010.
+# Joëlle Cornavin <jcorn@free.fr>, 2007, 2008, 2009, 2010, 2011, 2012, 2013.
+# Sebastien Renard <renard@kde.org>, 2013, 2014.
+# Vincent Pinon <vpinon@kde.org>, 2016, 2017.
+# Simon Depiets <sdepiets@gmail.com>, 2017, 2018.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2018-07-16 16:28+0800\n"
+"Last-Translator: Simon Depiets <sdepiets@gmail.com>\n"
+"Language-Team: French <kde-francophone@kde.org>\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"X-Generator: Lokalize 2.0\n"
+"X-Environment: kde\n"
+"X-Accelerator-Marker: &\n"
+"X-Text-Markup: qtrich\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Aucune licence n'a été spécifiée pour ce programme.\n"
+"Veuillez consulter la documentation ou le code source\n"
+"pour trouver les éventuels termes de la licence.\n"
+
+#: lib/kaboutdata.cpp:306
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Ce programme est distribué selon les termes de la %1."
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "Version 2 de la Licence Générale Publique GNU"
+
+#: lib/kaboutdata.cpp:356
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "Version 2 de la Licence Générale Publique Limitée GNU"
+
+#: lib/kaboutdata.cpp:360
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Licence BSD"
+
+#: lib/kaboutdata.cpp:361
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Licence BSD"
+
+#: lib/kaboutdata.cpp:364
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Licence Artistique"
+
+#: lib/kaboutdata.cpp:365
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Licence Artistique"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Licence Publique Q"
+
+#: lib/kaboutdata.cpp:372
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "Version 3 de la Licence Générale Publique GNU"
+
+#: lib/kaboutdata.cpp:376
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "Version 3 de la Licence Générale Publique Limitée GNU"
+
+#: lib/kaboutdata.cpp:380
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:381
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "Version 2.1 de la Licence Générale Publique Limitée GNU"
+
+#: lib/kaboutdata.cpp:385
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Personnalisé"
+
+#: lib/kaboutdata.cpp:388
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Non spécifié"
+
+#: lib/kaboutdata.cpp:937
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE est traduit dans de nombreuses langues grâce au travail des équipes "
+"d'internationalisation.</p><p>Pour plus d'informations sur "
+"l'internationalisation de KDE, consultez <a href=\"https://l10n.kde.org"
+"\">https://l10n.kde.org</a>.</p><p>Le travail de l'équipe francophone est "
+"consultable sur <a href=\"https://fr.l10n.kde.org\">https://fr.l10n.kde.org</"
+"a>.</p>"
+
+#: lib/kaboutdata.cpp:1165
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Afficher les informations sur l'auteur."
+
+#: lib/kaboutdata.cpp:1166
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Afficher les informations sur la licence."
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "La base du nom de fichier de l'entrée desktop pour cette application."
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "nom du fichier"
+
+#: lib/kaboutdata.cpp:1178
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr ""
+"Cette application a été écrite par quelqu'un souhaitant rester anonyme."
+
+#: lib/kaboutdata.cpp:1180
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 a été écrit par :"
+
+#: lib/kaboutdata.cpp:1191
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Veuillez utiliser « https://bugs.kde.org » pour signaler des bogues."
+
+#: lib/kaboutdata.cpp:1193
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Veuillez signaler les bogues à %1."
+
+#: lib/plugin/kpluginloader.cpp:122
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "La bibliothèque %1 n'offre pas une KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "AM"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "PM"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "AM"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "AM"
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "@action"
+#| msgid "Mail"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Messagerie"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "@item Text character set"
+#| msgid "Thai"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Thaïlandais"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Édition"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Soumettre"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "AM"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 o"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 ko"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 Mo"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 Go"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 To"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 Po"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 Eo"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 Zo"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 Yo"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 o"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 Ko"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 Mo"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 Go"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 To"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 Po"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 Eo"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 Zo"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 Yo"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 o"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 Kio"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 Mio"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 Gio"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 Tio"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 Pio"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 Eio"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 Zio"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 Yio"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2.%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h%2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2m%3.%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 jours"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 heures"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minutes"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 secondes"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n milliseconde"
+msgstr[1] "%n millisecondes"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n jour"
+msgstr[1] "%n jours"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n heure"
+msgstr[1] "%n heures"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minute"
+msgstr[1] "%n minutes"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n seconde"
+msgstr[1] "%n secondes"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 et %2"
+
+#: lib/util/kformatprivate.cpp:509
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Date non valable"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Demain"
+
+#: lib/util/kformatprivate.cpp:521
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Aujourd'hui"
+
+#: lib/util/kformatprivate.cpp:523
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Hier"
+
+#: lib/util/kformatprivate.cpp:529
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Lundi dernier"
+
+#: lib/util/kformatprivate.cpp:531
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "Mardi dernier"
+
+#: lib/util/kformatprivate.cpp:533
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Mercredi dernier"
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "Jeudi dernier"
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "Vendredi dernier"
+
+#: lib/util/kformatprivate.cpp:539
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "Samedi dernier"
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "Dimanche dernier"
+
+#: lib/util/kformatprivate.cpp:546
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Lundi prochain"
+
+#: lib/util/kformatprivate.cpp:548
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Mardi prochain"
+
+#: lib/util/kformatprivate.cpp:550
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Mercredi prochain"
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "Jeudi prochain"
+
+#: lib/util/kformatprivate.cpp:554
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Vendredi prochain"
+
+#: lib/util/kformatprivate.cpp:556
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Samedi prochain"
+
+#: lib/util/kformatprivate.cpp:558
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Dimanche prochain"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# translation of kdelibs4.po to Nederlands
+# translation of kdelibs4.po to
+# KTranslator Generated File
+# Fryske oersetting fan kdelibs.
+# Copyright (C) 2000,2001,2002,2003 KDE e.v..
+# let op! het bestand bevat ter hoogte van string 2470
+# een gesplitste zinnen die mbv. %1 of %2 weer worden samengevoegd!!
+# Bauke Nicolai <mildaam@hotmail.com>, 2002.
+# KDE-oersetgroep Frysk <frysk@kde.nl>, 2000, 2001, 2002,2003.
+# Rinse de Vries <rinsedevries@kde.nl>, 2004, 2005, 2006, 2007.
+# Berend ytsma <berendy@bigfoot.com>, 2004.
+# Rinse de Vries <RinseDeVries@home.nl>, 2006, 2008.
+# Berend Ytsma <berendy@gmail.com>, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2010-07-22 09:48+0100\n"
+"Last-Translator: Berend Ytsma <berendy@gmail.com>\n"
+"Language-Team: nl <kde-i18n-doc@lists.kde.org>\n"
+"Language: fy\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KAider 0.1\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Der binne gjin lisinsje betingsten foar dit programma.\n"
+"Kontrolearje de dokumentaasje of de boarne foar\n"
+"allikefolle hokker lisinsje betingsten.\n"
+
+#: lib/kaboutdata.cpp:306
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Dit programma is ferspraat ûnder de betingsten fan de %1."
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License Version 2"
+
+#: lib/kaboutdata.cpp:356
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:360
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD Lisinsje"
+
+#: lib/kaboutdata.cpp:361
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD Lisinsje"
+
+#: lib/kaboutdata.cpp:364
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artistic lisinsje"
+
+#: lib/kaboutdata.cpp:365
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artistic lisinsje"
+
+#: lib/kaboutdata.cpp:368
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public lisinsje"
+
+#: lib/kaboutdata.cpp:372
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License Version 2"
+
+#: lib/kaboutdata.cpp:376
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License Version 3"
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:381
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:385
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Oanpast"
+
+#: lib/kaboutdata.cpp:388
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Net oantsjutte"
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE is yn ferskate talen beskikber. Dat is te tankjen oan de ynset fan "
+"oersetteams dy' t rûnom op 'e wrâld aktyf binne.</p><p>Sjoch foar mear "
+"ynformaasje oer de Frysktalige KDE op http://www.kde.nl/frysk en foar "
+"algemiene ynformaasje oer de ynternasjonalisaasje fan KDE op http://l10n.kde."
+"org</p>"
+
+#: lib/kaboutdata.cpp:1165
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Skriuwersynformaasje sjen litte"
+
+#: lib/kaboutdata.cpp:1166
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Lisinsje-ynformaasje sjen litte"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1178
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Dizze applikaasje is skreaun troch ien dy anonym winsk te bliuwen."
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 is skreaun troch\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr ""
+"Brûk http://bugs.kde.org om brekkings (programmaflaters) te rapportearjen.\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Rapportearje brekkings oan %1.\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Dizze %1 bibleteek jout gjin KDE4-kompatible factory"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "pm"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "@action"
+#| msgid "Mail"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "E-post"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tir"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Bewurkje"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Yntsjinje"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, fuzzy, qt-format
+#| msgctxt "memory size in 1024 bytes"
+#| msgid "%1 KB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, fuzzy, qt-format
+#| msgctxt "size in 1024 bytes"
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, fuzzy, qt-format
+#| msgctxt "size in 2^20 bytes"
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, fuzzy, qt-format
+#| msgctxt "size in 2^30 bytes"
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, fuzzy, qt-format
+#| msgctxt "size in 2^50 bytes"
+#| msgid "%1 PiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, fuzzy, qt-format
+#| msgctxt "size in 2^60 bytes"
+#| msgid "%1 EiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, fuzzy, qt-format
+#| msgctxt "size in 2^70 bytes"
+#| msgid "%1 ZiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, fuzzy, qt-format
+#| msgctxt "size in 2^80 bytes"
+#| msgid "%1 YiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 dagen"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 oeren"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minuten"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 sekonden"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 millisekonde"
+msgstr[1] "%1 millisekonde"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 dagen"
+msgstr[1] "%1 dagen"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 oeren"
+msgstr[1] "%1 oeren"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 minuten"
+msgstr[1] "%1 minuten"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 sekonden"
+msgstr[1] "%1 sekonden"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 en %2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+#| msgid "Invalid item."
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Unjildige item."
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Hjoed"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Juster"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Takom moanne"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "tiisdei"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "woansdei"
+
+#: lib/util/kformatprivate.cpp:535
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "tongersdei"
+
+#: lib/util/kformatprivate.cpp:537
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "freed"
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "sneon"
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Takom moanne"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "tiisdei"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "woansdei"
+
+#: lib/util/kformatprivate.cpp:552
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "tongersdei"
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "freed"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "sneon"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Takom jier"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "%1 is 'the slot asked for foo arguments', %2 is 'but there are only bar "
+#| "available'"
+#| msgid "%1, %2."
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2."
--- /dev/null
+# translation of kdelibs4.po to Irish
+# Translation of kdelibs4.po to Irish
+# Copyright (C) 1999,2003,2004 Free Software Foundation, Inc.
+# Sean V. Kelley <s_oceallaigh@yahoo.com>, 1999
+# Séamus Ó Ciardhuáin <seoc at iolfree.ie>, 2003,2004
+# Kevin Scannell <kscanne@gmail.com>, 2004-2009
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2004-12-14 09:11-0600\n"
+"Last-Translator: Kevin Scannell <kscanne@gmail.com>\n"
+"Language-Team: Irish <gaeilge-gnulinux@lists.sourceforge.net>\n"
+"Language: ga\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.9.1\n"
+"Plural-Forms: nplurals=5; plural=n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n < 11 ? "
+"3 : 4\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Níor tugadh coinníollacha ceadúnaithe don bhogearra seo.\n"
+"Féach sna lámhleabhair nó sna foinsí le haghaidh\n"
+"coinníollacha ceadúnaithe.\n"
+
+#: lib/kaboutdata.cpp:306
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Cuirtear an bogearra seo ar fáil de réir coinníollacha an %1."
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License Version 2"
+
+#: lib/kaboutdata.cpp:356
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:360
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Ceadúnas BSD"
+
+#: lib/kaboutdata.cpp:361
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Ceadúnas BSD"
+
+#: lib/kaboutdata.cpp:364
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Ceadúnas \"Artistic\""
+
+#: lib/kaboutdata.cpp:365
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Ceadúnas \"Artistic\""
+
+#: lib/kaboutdata.cpp:368
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Ceadúnas Poiblí Q"
+
+#: lib/kaboutdata.cpp:372
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License Version 3"
+
+#: lib/kaboutdata.cpp:376
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License Version 3"
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:381
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:385
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Ceadúnas Saincheaptha"
+
+#: lib/kaboutdata.cpp:388
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Gan sonrú"
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>Aistrítear KDE go teangacha éagsúla de bharr obair na bhfoirne "
+"aistriúcháin ar fud an domhain.</p> <p>Chun tuilleadh eolais faoi "
+"idirnáisiúnú KDE a fháil, téigh go <a href=\"http://l10n.kde.org\">http://"
+"l10n.kde.org/</a></p> "
+
+#: lib/kaboutdata.cpp:1165
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Taispeáin eolas faoin údar"
+
+#: lib/kaboutdata.cpp:1166
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Taispeáin eolas faoin cheadúnas"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+#, fuzzy
+#| msgid "Vietnamese"
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "Vítneaimis"
+
+#: lib/kaboutdata.cpp:1178
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr ""
+"Bhí an feidhmchlár seo scríofa ag duine gur mian leis a bheith anaithnid."
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"Bhí %1 scríofa ag:\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Bain úsáid as http://bugs.kde.org chun tuairiscí fabht a sheoladh.\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Seol tuairiscí fabhtanna chuig %1.\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer an %2 function."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Níl feidhm %2 sa leabharlann %1."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "pm"
+
+#: lib/util/kformatprivate.cpp:121
+#, fuzzy
+#| msgid "On"
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "Ar Siúl"
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Ok"
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "OK"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "AM"
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgid "Miss"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Iníon"
+
+#: lib/util/kformatprivate.cpp:127
+#, fuzzy
+#| msgid "G:"
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G:"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tir"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Eagar"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+#, fuzzy
+#| msgctxt "QFont"
+#| msgid "Yi"
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:132
+#, fuzzy
+#| msgctxt "QFont"
+#| msgid "Yi"
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Seol"
+
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy
+#| msgid "B:"
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B:"
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, fuzzy, qt-format
+#| msgctxt "memory size in 1024 bytes"
+#| msgid "%1 KB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, fuzzy, qt-format
+#| msgctxt "size in 1024 bytes"
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, fuzzy, qt-format
+#| msgctxt "size in 2^20 bytes"
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, fuzzy, qt-format
+#| msgctxt "size in 2^30 bytes"
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, fuzzy, qt-format
+#| msgctxt "size in 2^50 bytes"
+#| msgid "%1 PiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, fuzzy, qt-format
+#| msgctxt "size in 2^60 bytes"
+#| msgid "%1 EiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, fuzzy, qt-format
+#| msgctxt "size in 2^70 bytes"
+#| msgid "%1 ZiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, fuzzy, qt-format
+#| msgctxt "size in 2^80 bytes"
+#| msgid "%1 YiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 lá"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 uair"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 nóiméad"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 soicind"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 mhilleasoicind"
+msgstr[1] "%1 mhilleasoicind"
+msgstr[2] "%1 mhilleasoicind"
+msgstr[3] "%1 mhilleasoicind"
+msgstr[4] "%1 mhilleasoicind"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 lá"
+msgstr[1] "%1 lá"
+msgstr[2] "%1 lá"
+msgstr[3] "%1 lá"
+msgstr[4] "%1 lá"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 uair"
+msgstr[1] "%1 uair"
+msgstr[2] "%1 uair"
+msgstr[3] "%1 uair"
+msgstr[4] "%1 uair"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 nóiméad"
+msgstr[1] "%1 nóiméad"
+msgstr[2] "%1 nóiméad"
+msgstr[3] "%1 nóiméad"
+msgstr[4] "%1 nóiméad"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 soicind"
+msgstr[1] "%1 soicind"
+msgstr[2] "%1 soicind"
+msgstr[3] "%1 soicind"
+msgstr[4] "%1 soicind"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 agus %2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+#| msgid "Invalid item."
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Mír neamhbhailí."
+
+#: lib/util/kformatprivate.cpp:519
+#, fuzzy
+#| msgctxt "@option tomorrow"
+#| msgid "Tomorrow"
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Amárach"
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Inniu"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Inné"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+#| msgctxt "@option last month"
+#| msgid "Last Month"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "An mhí seo caite"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "Máirt"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Céadaoin"
+
+#: lib/util/kformatprivate.cpp:535
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "Déardaoin"
+
+#: lib/util/kformatprivate.cpp:537
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "Aoine"
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "Satharn"
+
+#: lib/util/kformatprivate.cpp:541
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "Domhnach"
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+#| msgctxt "@option next month"
+#| msgid "Next Month"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "An mhí seo chugainn"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Máirt"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Céadaoin"
+
+#: lib/util/kformatprivate.cpp:552
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "Déardaoin"
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Aoine"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Satharn"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Domhnach"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, fuzzy, qt-format
+#| msgctxt "City, Country"
+#| msgid "%1, %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# GunChleoc <fios@foramnagaidhlig.net>, 2014, 2015, 2016.
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: 2016-04-29 19:30+0100\n"
+"Last-Translator: GunChleoc <fios@foramnagaidhlig.net>\n"
+"Language-Team: Fòram na Gàidhlig\n"
+"Language: gd\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : "
+"(n > 2 && n < 20) ? 2 : 3;\n"
+"X-Generator: Virtaal 0.7.1\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Cha deach teirmichean ceadachais a shònrachadh airson a' phrògraim seo.\n"
+"Thoir sùil air an docamaideadh no air a' bhun-tùs airson\n"
+"teirmichean ceadachais sam bith.\n"
+
+#: lib/kaboutdata.cpp:306
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Cha am prògram seo 'ga sgaoileadh fo theirmichean a' cheadachais %1."
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License, tionndadh 2"
+
+#: lib/kaboutdata.cpp:356
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License, tionndadh 2"
+
+#: lib/kaboutdata.cpp:360
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD License"
+
+#: lib/kaboutdata.cpp:361
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD License"
+
+#: lib/kaboutdata.cpp:364
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artistic License"
+
+#: lib/kaboutdata.cpp:365
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artistic License"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public License"
+
+#: lib/kaboutdata.cpp:372
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License, tionndadh 3"
+
+#: lib/kaboutdata.cpp:376
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License, tionndadh 3"
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgctxt "KAboutLicense|@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:381
+#, fuzzy
+#| msgctxt "KAboutLicense|@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License, tionndadh 2"
+
+#: lib/kaboutdata.cpp:385
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Gnàthaichte"
+
+#: lib/kaboutdata.cpp:388
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Gun sònrachadh"
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt ""
+#| "KAboutData|replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>Tha KDE 'ga eadar-theangachadh gu iomadh cànan taing dhan obair a nì "
+"sgiobaidhean eadar-theangachaidh air feadh an t-saoghail.</p><p>Airson "
+"barrachd fiosrachaidh mu eadar-theangachadh aig KDE, tadhail air <a href="
+"\"http://l10n.kde.org\">http://l10n.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1165
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Seall fiosrachadh ùghdair."
+
+#: lib/kaboutdata.cpp:1166
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Seall fiosrachadh a' cheadachais."
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Ainm faidhle bunaiteach an innteirt desktop airson na h-aplacaid seo."
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "ainm an fhaidhle"
+
+#: lib/kaboutdata.cpp:1178
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr ""
+"Chaidh an aplacaid seo a sgrìobhadh le cuideigin nach eil airson ainm "
+"foillseachadh."
+
+#: lib/kaboutdata.cpp:1180
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "Chaidh %1 a sgrìobhadh le:"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgctxt "KAboutData CLI|"
+#| msgid "Please use http://bugs.kde.org to report bugs."
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Cleachd http://bugs.kde.org gus aithris a dhèanamh air bugaichean."
+
+#: lib/kaboutdata.cpp:1193
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Cuir aithrisean air bugaichean gu %1."
+
+#: lib/plugin/kpluginloader.cpp:122
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Chan eil KPluginFactory air an leabharlann %1."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr ""
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr ""
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2.%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h%2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2m%3.%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 là(ithean)"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 uair(ean)"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 m(h)ionaid(ean)"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 d(h)iog(an)"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n millisecond(s)"
+#| msgid_plural "%n millisecond(s)"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n mhille-dhiog"
+msgstr[1] "%n mhille-dhiog"
+msgstr[2] "%n mhille-dhiog"
+msgstr[3] "%n mhille-dhiog"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n day(s)"
+#| msgid_plural "%n day(s)"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n latha"
+msgstr[1] "%n latha"
+msgstr[2] "%n latha"
+msgstr[3] "%n latha"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n hour(s)"
+#| msgid_plural "%n hour(s)"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n uair"
+msgstr[1] "%n uair"
+msgstr[2] "%n uair"
+msgstr[3] "%n uair"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n minute(s)"
+#| msgid_plural "%n minute(s)"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n mhionaid"
+msgstr[1] "%n mhionaid"
+msgstr[2] "%n mhionaid"
+msgstr[3] "%n mhionaid"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n second(s)"
+#| msgid_plural "%n second(s)"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n diog"
+msgstr[1] "%n diog"
+msgstr[2] "%n diog"
+msgstr[3] "%n diog"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 agus %2"
+
+#: lib/util/kformatprivate.cpp:509
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "A-màireach"
+
+#: lib/util/kformatprivate.cpp:521
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "An-diugh"
+
+#: lib/util/kformatprivate.cpp:523
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "An-dè"
+
+#: lib/util/kformatprivate.cpp:529
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:531
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:533
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:539
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:546
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:548
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:550
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:554
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:556
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:558
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr ""
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# translation of kdelibs4.po to galician
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# mvillarino <mvillarino@users.sourceforge.net>, 2007, 2008, 2009.
+# Marce Villarino <mvillarino@kde-espana.es>, 2008, 2009.
+# marce villarino <mvillarino@users.sourceforge.net>, 2009.
+# marce villarino <mvillarino@gmail.com>, 2009.
+# Marce Villarino <mvillarino@kde-espana.es>, 2009, 2010, 2011, 2012.
+# Xosé <xosecalvo@gmail.com>, 2010.
+# Marce Villarino <mvillarino@kde-espana.es>, 2011, 2012, 2013, 2014.
+# Adrián Chaves Fernández <adriyetichaves@gmail.com>, 2015, 2016, 2017.
+# Adrián Chaves (Gallaecio) <adrian@chaves.io>, 2017, 2018.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2018-12-10 19:51+0100\n"
+"Last-Translator: Adrián Chaves (Gallaecio) <adrian@chaves.io>\n"
+"Language-Team: Galician <kde-i18n-doc@kde.org>\n"
+"Language: gl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Lokalize 2.0\n"
+"X-Environment: kde, development\n"
+"X-Accelerator-Marker: &\n"
+"X-Text-Markup: kde4\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Non se especificou a licenza deste programa.\n"
+"Comprobe a documentación ou o código fonte se a necesita.\n"
+
+#: lib/kaboutdata.cpp:306
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Este programa distribúese baixo os termos da licenza %1."
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "Licenza Pública Xeral de GNU, Versión 2"
+
+#: lib/kaboutdata.cpp:356
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "Licenza Pública Xeral Menor de GNU, Versión 2"
+
+#: lib/kaboutdata.cpp:360
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Licenza BSD"
+
+#: lib/kaboutdata.cpp:361
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Licenza BSD"
+
+#: lib/kaboutdata.cpp:364
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Licenza artística"
+
+#: lib/kaboutdata.cpp:365
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Licenza artística"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Licenza pública Q"
+
+#: lib/kaboutdata.cpp:372
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "Licenza Pública Xeral de GNU, Versión 3"
+
+#: lib/kaboutdata.cpp:376
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "Licenza Pública Xeral Menor de GNU, Versión 3"
+
+#: lib/kaboutdata.cpp:380
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:381
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "Licenza Pública Xeral Menor de GNU, Versión 2.1"
+
+#: lib/kaboutdata.cpp:385
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Personalizada"
+
+#: lib/kaboutdata.cpp:388
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Non especificada"
+
+#: lib/kaboutdata.cpp:937
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE está traducido a moitos idiomas grazas ao traballo dos equipos de "
+"tradución de todo o mundo.</p><p>Para máis información sobre a "
+"internacionalización de KDE visite <a href=\"https://l10n.kde.org\">https://"
+"l10n.kde.org</a> ou http://www.trasno.net/</p>"
+
+#: lib/kaboutdata.cpp:1165
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Mostrar información do autor."
+
+#: lib/kaboutdata.cpp:1166
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Mostrar información da licenza."
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "O nome de ficheiro base da entrada de escritorio do aplicativo."
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "nome de ficheiro"
+
+#: lib/kaboutdata.cpp:1178
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Este aplicativo foi escrito por alguén que quere quedar anónimo."
+
+#: lib/kaboutdata.cpp:1180
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 foi escrito por:"
+
+#: lib/kaboutdata.cpp:1191
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Use https://bugs.kde.org para informar de fallos."
+
+#: lib/kaboutdata.cpp:1193
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Informe dos fallos que atope a %1."
+
+#: lib/plugin/kpluginloader.cpp:122
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "A biblioteca %1 non ofrece unha KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "y"
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "z"
+
+#: lib/util/kformatprivate.cpp:118
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "a"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "f"
+
+#: lib/util/kformatprivate.cpp:120
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "p"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "µ"
+
+#: lib/util/kformatprivate.cpp:123
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "k"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Ki"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "M"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mi"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Gi"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "T"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ti"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pi"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "E"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ei"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "Z"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Zi"
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:140
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "bit"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B"
+
+#: lib/util/kformatprivate.cpp:146
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Hz"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m %2.%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m %2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h %2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h %2m %3.%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h %2m %3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 días"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 horas"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minutos"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 segundos"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n milisegundo"
+msgstr[1] "%n milisegundo"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n día"
+msgstr[1] "%n días"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n hora"
+msgstr[1] "%n horas"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minuto"
+msgstr[1] "%n minutos"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n segundo"
+msgstr[1] "%n segundos"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 e %2"
+
+#: lib/util/kformatprivate.cpp:509
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "A data é incorrecta."
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Mañá"
+
+#: lib/util/kformatprivate.cpp:521
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Hoxe"
+
+#: lib/util/kformatprivate.cpp:523
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Onte"
+
+#: lib/util/kformatprivate.cpp:529
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "O luns pasado"
+
+#: lib/util/kformatprivate.cpp:531
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "O martes pasado"
+
+#: lib/util/kformatprivate.cpp:533
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "O mércores pasado"
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "O xoves pasado"
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "O venres pasado"
+
+#: lib/util/kformatprivate.cpp:539
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "O sábado pasado"
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "O domingo pasado"
+
+#: lib/util/kformatprivate.cpp:546
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "O vindeiro luns"
+
+#: lib/util/kformatprivate.cpp:548
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "O vindeiro martes"
+
+#: lib/util/kformatprivate.cpp:550
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "O vindeiro mércores"
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "O vindeiro xoves"
+
+#: lib/util/kformatprivate.cpp:554
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "O vindeiro venres"
+
+#: lib/util/kformatprivate.cpp:556
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "O vindeiro sábado"
+
+#: lib/util/kformatprivate.cpp:558
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "O vindeiro domingo"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# translation of kdelibs4.po to Gujarati
+# Copyright (C) 2008 This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Kartik Mistry <kartik.mistry@gmail.com>, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2009-11-22 00:01+0530\n"
+"Last-Translator: Kartik Mistry <kartik.mistry@gmail.com>\n"
+"Language-Team: Gujarati <team@utkarsh.org>\n"
+"Language: gu\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"X-Generator: KBabel 1.11.4\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"આ કાર્યક્રમ માટે કોઈ લાઈસન્સીંગ શરતો સ્પષ્ટ થયેલ નથી.\n"
+"કોઈપણ લાઈસન્સીંગ શરતો માટે મહેરબાની કરી દસ્તાવેજો અથવા\n"
+"સ્રોતની ચકાસણી કરો.\n"
+
+#: lib/kaboutdata.cpp:306
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "આ કાર્યક્રમ %1 ની શરતો હેઠળ વિતરિત થયેલ છે."
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v૨"
+
+#: lib/kaboutdata.cpp:353
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU જનરલ પબ્લિક લાઈસન્સ આવૃત્તિ ૨"
+
+#: lib/kaboutdata.cpp:356
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v૨"
+
+#: lib/kaboutdata.cpp:357
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU લેસર જનરલ પબ્લિક લાઈસન્સ આવૃત્તિ ૨"
+
+#: lib/kaboutdata.cpp:360
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD લાઈસન્સ"
+
+#: lib/kaboutdata.cpp:361
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD લાઈસન્સ"
+
+#: lib/kaboutdata.cpp:364
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "આર્ટિસ્ટિક લાઈસન્સ"
+
+#: lib/kaboutdata.cpp:365
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "આર્ટિસ્ટિક લાઈસન્સ"
+
+#: lib/kaboutdata.cpp:368
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v૧.૦"
+
+#: lib/kaboutdata.cpp:369
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q પબ્લિક લાઈસન્સ"
+
+#: lib/kaboutdata.cpp:372
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v૩"
+
+#: lib/kaboutdata.cpp:373
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU જનરલ પબ્લિક લાઈસન્સ આવૃત્તિ ૩"
+
+#: lib/kaboutdata.cpp:376
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v૩"
+
+#: lib/kaboutdata.cpp:377
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU લેસર જનરલ પબ્લિક લાઈસન્સ આવૃત્તિ ૩"
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v૨"
+
+#: lib/kaboutdata.cpp:381
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU લેસર જનરલ પબ્લિક લાઈસન્સ આવૃત્તિ ૨"
+
+#: lib/kaboutdata.cpp:385
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "પોતાનું"
+
+#: lib/kaboutdata.cpp:388
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "સ્પષ્ટ થયેલ નથી"
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE ઘણી બધી ભાષાઓમાં ભાષાંતરિત થયેલ છે જે સમગ્ર વિશ્વની ભાષાંતર ટીમોને આભારી છે.</"
+"p><p>વધુ માહિતી માટે KDE આંતરરાષ્ટ્રિયકરણની મુલાકાત લો <a href=\"http://l10n.kde."
+"org\">http://l10n.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1165
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "લેખક જાણકારી બતાવો"
+
+#: lib/kaboutdata.cpp:1166
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "લાઈસન્સ જાણકારી બતાવો"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1178
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "આ કાર્યક્રમ કોઈક દ્વારા લખાયેલ છે કે જેને ગુમનામ રહેવું છે."
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 લખાયું છે આમનાં દ્વારા\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "મહેરબાની કરી ક્ષતિઓનો અહેવાલ આપવા માટે http://bugs.kde.org નો ઉપયોગ કરો.\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "મહેરબાની કરી ક્ષતિઓનો અહેવાલ %1 પર આપો.\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "લાઇબ્રેરી %1 KDE ૪ સુસંગતતા ફેક્ટરી આપતી નથી."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "સવાર"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "સાંજ"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "સવાર"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgctxt "Coptic month 4 - ShortName"
+#| msgid "Kia"
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "કિઆ"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "Ethiopian month 8 - ShortName"
+#| msgid "Miy"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "મિય"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "તિર"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "Coptic weekday 4 - ShortDayName"
+#| msgid "Pti"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "તિ"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "ફેરફાર"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "રજુ કરો"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "સવાર"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 બાઈટ"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 કેબી"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 એમબી"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 જીબી"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 ટીબી"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 પીબી"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 ઈબી"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ઝીબી"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 વાયબી"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 બાઈટ"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, fuzzy, qt-format
+#| msgctxt "memory size in 1024 bytes"
+#| msgid "%1 KB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 કેબી"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 એમબી"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 જીબી"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 ટીબી"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 પીબી"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 ઈબી"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ઝીબી"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 વાયબી"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 બાઈટ"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, fuzzy, qt-format
+#| msgctxt "size in 1024 bytes"
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 કેબી"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, fuzzy, qt-format
+#| msgctxt "size in 2^20 bytes"
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 એમબી"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, fuzzy, qt-format
+#| msgctxt "size in 2^30 bytes"
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 જીબી"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 ટીબી"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 PiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 પીબી"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, fuzzy, qt-format
+#| msgctxt "size in 2^50 bytes"
+#| msgid "%1 EiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 ઈબી"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, fuzzy, qt-format
+#| msgctxt "size in 2^60 bytes"
+#| msgid "%1 ZiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ઝીબી"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, fuzzy, qt-format
+#| msgctxt "size in 2^70 bytes"
+#| msgid "%1 YiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 વાયબી"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 દિવસો"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 કલાકો"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 મિનિટો"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 સેકંડો"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 મિલિસેકન્ડ"
+msgstr[1] "%1 મિલિસેકન્ડ"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 દિવસો"
+msgstr[1] "%1 દિવસો"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 કલાકો"
+msgstr[1] "%1 કલાકો"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 મિનિટો"
+msgstr[1] "%1 મિનિટો"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 સેકંડો"
+msgstr[1] "%1 સેકંડો"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 અને %2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+#| msgctxt "@item Calendar system"
+#| msgid "Invalid Calendar Type"
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "અયોગ્ય કેલેન્ડર પ્રકાર"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "આજે"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "ગઇકાલે"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "ગયો મહિનો"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "મંગળવાર"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "બુધવાર"
+
+#: lib/util/kformatprivate.cpp:535
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "ગુરુવાર"
+
+#: lib/util/kformatprivate.cpp:537
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "શુક્રવાર"
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "શનિવાર"
+
+#: lib/util/kformatprivate.cpp:541
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "રવિવાર"
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "આગળનો મહિનો"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "મંગળવાર"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "બુધવાર"
+
+#: lib/util/kformatprivate.cpp:552
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "ગુરુવાર"
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "શુક્રવાર"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "શનિવાર"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "રવિવાર"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1 %2"
--- /dev/null
+# Hausa translation for kdelibs strings.
+# Copyright 2009 Adriaan de Groot, Mustapha Abubakar, Ibrahim Dasuna
+# This file is distributed under the same license as the kdelibs package.
+#
+# Adriaan de Groot <groot@kde.org>, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2009-03-17 11:22+0100\n"
+"Last-Translator: Adriaan de Groot <groot@kde.org>\n"
+"Language-Team: Hausa <kde-i18n-doc@lists.kde.org>\n"
+"Language: ha\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Lokalize 0.2\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+
+#: lib/kaboutdata.cpp:306
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr ""
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:356
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:360
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr ""
+
+#: lib/kaboutdata.cpp:361
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr ""
+
+#: lib/kaboutdata.cpp:364
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr ""
+
+#: lib/kaboutdata.cpp:365
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr ""
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr ""
+
+#: lib/kaboutdata.cpp:369
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr ""
+
+#: lib/kaboutdata.cpp:372
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:376
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:381
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr ""
+
+#: lib/kaboutdata.cpp:385
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr ""
+
+#: lib/kaboutdata.cpp:388
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr ""
+
+#: lib/kaboutdata.cpp:937
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1165
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1166
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1178
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1180
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgid ""
+#| "Please use <a href=\"http://bugs.kde.org\">http://bugs.kde.org</a> to "
+#| "report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr ""
+"Yi amfani da <a href=\"http://bugs.kde.org\">http://bugs.kde.org</a> domin "
+"sanar da matsaloli.\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+#| msgid "Please report bugs to <a href=\"mailto:%1\">%2</a>.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Sanar da matsaloli ga <a href=\"mailto:%1\">%2</a>.\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "safe"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "yamma"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "safe"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "safe"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr ""
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr ""
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr ""
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr ""
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr ""
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr ""
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr ""
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr ""
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr ""
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr ""
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr ""
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr ""
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr ""
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr ""
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr ""
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr ""
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr ""
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr ""
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr ""
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr ""
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr ""
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr ""
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr ""
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr ""
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr ""
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr ""
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr ""
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr ""
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr ""
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] ""
+msgstr[1] ""
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] ""
+msgstr[1] ""
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] ""
+msgstr[1] ""
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] ""
+msgstr[1] ""
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] ""
+msgstr[1] ""
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:509
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Yau"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Jiya"
+
+#: lib/util/kformatprivate.cpp:529
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:531
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:533
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:539
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:546
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:548
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:550
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:554
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:556
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:558
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr ""
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr ""
--- /dev/null
+# translation of kdelibs4.po to hebrew
+# Translation of kdelibs4.po to Hebrew
+# translation of kdelibs4.po to
+# KDE Hebrew Localization Project
+#
+# In addition to the copyright owners of the program
+# which this translation accompanies, this translation is
+# Copyright (C) 1998 Erez Nir <erez-n@actcom.co.il>
+# Copyright (C) 1999-2003 Meni Livne <livne@kde.org>
+#
+# This translation is subject to the same Open Source
+# license as the program which it accompanies.
+#
+# Diego Iastrubni <elcuco@kde.org>, 2003.
+# Diego Iastrubni <elcuco@kde.org>, 2003, 2004.
+# Diego Iastrubni <elcuco@kde.org>, 2005, 2006, 2007, 2008, 2009, 2012, 2014.
+# Meni Livne <livne@kde.org>, 2007.
+# tahmar1900 <tahmar1900@gmail.com>, 2008, 2009.
+# Elkana Bardugo <ttv200@gmail.com>, 2017. #zanata
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2017-05-16 06:49-0400\n"
+"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
+"Language-Team: Hebrew <kde-i18n-doc@kde.org>\n"
+"Language: he\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Zanata 3.9.6\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+#, fuzzy
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"לא צוינו תנאי רישיון כלשהם לתוכנית זו.\n"
+"בדוק אם ישנם תנאי רישיון כלשהם\n"
+"בתיעוד או בקוד המקור.\n"
+
+#: lib/kaboutdata.cpp:306
+#, fuzzy, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "תוכנית זו מופצת תחת התנאים של %1."
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License Version 2"
+
+#: lib/kaboutdata.cpp:356
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:360
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD License"
+
+#: lib/kaboutdata.cpp:361
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD License"
+
+#: lib/kaboutdata.cpp:364
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artistic License"
+
+#: lib/kaboutdata.cpp:365
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artistic License"
+
+#: lib/kaboutdata.cpp:368
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public License"
+
+#: lib/kaboutdata.cpp:372
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License Version 3"
+
+#: lib/kaboutdata.cpp:376
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License Version 3"
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:381
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:385
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "מותאם־אישית"
+
+#: lib/kaboutdata.cpp:388
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "לא צוין"
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p> סביבת שולחן העבודה KDE תורגמה לשפות רבות הודות למאמציהם של צוותי תרגום "
+"מכל רחבי העולם. </p> <p> למידע נוסף על עברית ב־KDE, בקר באתר של KDE ישראל "
+"בכתובת <a href=\"http://kde.org.il\">http://kde.org.il</a>.</p><p> למידע "
+"כללי על בנאום KDE, בקר באתר <a href=\"http://i10n.kde.org\">http://i10n.kde."
+"org</a></p >"
+
+#: lib/kaboutdata.cpp:1165
+#, fuzzy
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "הצג מידע על הכותב"
+
+#: lib/kaboutdata.cpp:1166
+#, fuzzy
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "הצג מידע אודות הרישיון"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1178
+#, fuzzy
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "התוכנית נכתבה על ידי מישהו שמעוניין להישאר בעילום שם."
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 נכתב על ידי\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "אנא השתמש ב־http://bugs.kde.org כדי לדווח על באגים.\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "דווח על באגים אל: %1.\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, fuzzy, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "הספרייה %1 לא מספקת מפעל תואם KDE 4."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr ""
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr ""
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 ב'"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 ק\"ב"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 מ\"ב"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 ג\"ב"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 ט\"ב"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 פ\"ב"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 א\"ב"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ז\"ב"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 י\"ב"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 ב'"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 ק\"ב"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 מ\"ב"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 ג\"ב"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 ט\"ב"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 פ\"ב"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 א\"ב"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ז\"ב"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 י\"ב"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 ב'"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 ק\"ב"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 מ\"ב"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 ג\"ב"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 ט\"ב"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 פ\"ב"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 א\"ב"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ז\"ב"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 י\"ב"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 ימים"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 שעות"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 דקות"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 שניות"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 אלפית שנייה"
+msgstr[1] "%1 אלפית שנייה"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 ימים"
+msgstr[1] "%1 ימים"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 שעות"
+msgstr[1] "%1 שעות"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 דקות"
+msgstr[1] "%1 דקות"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 שניות"
+msgstr[1] "%1 שניות"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 ו־%2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "פריט שגוי."
+
+#: lib/util/kformatprivate.cpp:519
+#, fuzzy
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "מחר"
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "היום"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "אתמול"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "החודש הקודם"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "השנה הקודמת"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "השבוע הקודם"
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "השנה הקודמת"
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "החודש הבא"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "השנה הבאה"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "השנה הבאה"
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "השנה הבאה"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "השנה הבאה"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "השנה הבאה"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2."
--- /dev/null
+# translation of kdelibs4.po to Hindi
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Ravishankar Shrivastava <raviratlami@yahoo.com>, 2007.
+# Ravishankar Shrivastava <raviratlami@aol.in>, 2008.
+# G Karunakar <karunakar@indlinux.org>, 2009, 2010, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2012-06-25 15:27+0530\n"
+"Last-Translator: G Karunakar <karunakar@indlinux.org>\n"
+"Language-Team: Hindi <kde-i18n-doc@kde.org>\n"
+"Language: hi\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"X-Generator: Lokalize 1.2\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"इस प्रोग्राम के लिए कोई लाइसेंसिंग शर्तें उल्लेखित नहीं हैं.\n"
+"कृपया लाइसेंसिंग शर्तों के लिए\n"
+"दस्तावेज़ या स्रोत देखें.\n"
+
+#: lib/kaboutdata.cpp:306
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "यह प्रोग्राम %1 शर्तों के अधीन वितरित किया गया है."
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "जीपीएल सं.२"
+
+#: lib/kaboutdata.cpp:353
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "जीएनयू जनरल पब्लिक लाइसेंस संस्करण २"
+
+#: lib/kaboutdata.cpp:356
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "एलजीपीएल सं.२"
+
+#: lib/kaboutdata.cpp:357
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "जीएनयू लेसर जनरल पब्लिक लाइसेंस संस्करण २"
+
+#: lib/kaboutdata.cpp:360
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "बीएसडी लाइसेंस"
+
+#: lib/kaboutdata.cpp:361
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "बीएसडी लाइसेंस"
+
+#: lib/kaboutdata.cpp:364
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "आर्टिस्टिक लाइसेंस"
+
+#: lib/kaboutdata.cpp:365
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "आर्टिस्टिक लाइसेंस"
+
+#: lib/kaboutdata.cpp:368
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "क्यूपीएल सं.1.0"
+
+#: lib/kaboutdata.cpp:369
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "क्यू पब्लिक लाइसेंस"
+
+#: lib/kaboutdata.cpp:372
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "जीपीएल सं.३"
+
+#: lib/kaboutdata.cpp:373
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "जीएनयू जनरल पब्लिक लाइसेंस संस्करण ३"
+
+#: lib/kaboutdata.cpp:376
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "एलजीपीएल सं.३"
+
+#: lib/kaboutdata.cpp:377
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "जीएनयू जनरल पब्लिक लाइसेंस संस्करण ३"
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "एलजीपीएल सं.२"
+
+#: lib/kaboutdata.cpp:381
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "जीएनयू लेसर जनरल पब्लिक लाइसेंस संस्करण २"
+
+#: lib/kaboutdata.cpp:385
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "मनपसंद"
+
+#: lib/kaboutdata.cpp:388
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "उल्लेखित नहीं"
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>केडीई बहुत सी भाषाओं में अनूदित है. इस के लिए विश्व भर के अनुवादकों की टोलियों को "
+"हार्दिक धन्यवाद.</p><p>केडीई के अंतर्राष्ट्रीयकरण के बारे में और अधिक जानकारी के लिए यहाँ "
+"जाएँ: <a href=\"http://l10n.kde.org\">http://l10n.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1165
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "लेखक की जानकारी दिखाएँ"
+
+#: lib/kaboutdata.cpp:1166
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "लाइसेंस की जानकारी दिखाएँ"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1178
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "इस अनुप्रयोग को किसी ऐसे व्यक्ति द्वारा लिखा गया है जो बेनाम बने रहना चाहते हैं."
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 को \n"
+"%2 के द्वारा लिखा गया"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "कृपया http://bugs.kde.org का उपयोग बग रिपोर्ट के लिए करें.\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "कृपया बग रपट %1 को भेजें.\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "लाइब्रेरी %1 केडीई ४ योग्य फ़ैक्टरी प्रदान नहीं करता."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "पूर्वाह्न"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "अपराह्न"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "पूर्वाह्न"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "पूर्वाह्न"
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "@action"
+#| msgid "Mail"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "डाक"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "@item Text character set"
+#| msgid "Thai"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "थाई"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "अ"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "अ"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "संपादन"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "जमा करें"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "पूर्वाह्न"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 बा."
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 कि.बा."
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 मे.बा."
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 गी.बा."
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 टे.बा."
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 पे.बा."
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 इ.बा."
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 जी.बा."
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 य.बा."
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 बा."
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, fuzzy, qt-format
+#| msgctxt "memory size in 1024 bytes"
+#| msgid "%1 KB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 कि.बा."
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 मे.बा."
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 गी.बा."
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 टे.बा."
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 पे.बा."
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 इ.बा."
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 जी.बा."
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 य.बा."
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 बा."
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, fuzzy, qt-format
+#| msgctxt "size in 1024 bytes"
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 कि.बा."
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, fuzzy, qt-format
+#| msgctxt "size in 2^20 bytes"
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 मे.बा."
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, fuzzy, qt-format
+#| msgctxt "size in 2^30 bytes"
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 गी.बा."
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 टे.बा."
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, fuzzy, qt-format
+#| msgctxt "size in 2^50 bytes"
+#| msgid "%1 PiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 पे.बा."
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, fuzzy, qt-format
+#| msgctxt "size in 2^60 bytes"
+#| msgid "%1 EiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 इ.बा."
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, fuzzy, qt-format
+#| msgctxt "size in 2^70 bytes"
+#| msgid "%1 ZiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 जी.बा."
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, fuzzy, qt-format
+#| msgctxt "size in 2^80 bytes"
+#| msgid "%1 YiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 य.बा."
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 दिन"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 घंटे"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 मिनट"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 सेकण्ड"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 मिली-सेकण्ड्स"
+msgstr[1] "%1 मिली-सेकण्ड्स"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 दिन"
+msgstr[1] "%1 दिन"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 घंटे"
+msgstr[1] "%1 घंटे"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 मिनट"
+msgstr[1] "%1 मिनट"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 सेकण्ड"
+msgstr[1] "%1 सेकण्ड"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 और %2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+#| msgid "Invalid item."
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "अवैध मद."
+
+#: lib/util/kformatprivate.cpp:519
+#, fuzzy
+#| msgctxt "@option tomorrow"
+#| msgid "Tomorrow"
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "कल"
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "आज"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "कल"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+#| msgctxt "@option last month"
+#| msgid "Last Month"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "पिछले माह"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+#| msgctxt "@option last year"
+#| msgid "Last Year"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "पिछले वर्ष"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+#| msgctxt ""
+#| "referring to a filter on the modification and usage date of files/"
+#| "resources"
+#| msgid "Last Week"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "पिछले सप्ताह"
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+#| msgctxt "@option last year"
+#| msgid "Last Year"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "पिछले वर्ष"
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+#| msgctxt "@option next month"
+#| msgid "Next Month"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "अगला माह"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "अगला वर्ष"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+#| msgctxt "@option next week"
+#| msgid "Next Week"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "अगले सप्ताह"
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "अगला वर्ष"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "अगला वर्ष"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "अगला वर्ष"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, fuzzy, qt-format
+#| msgctxt "City, Country"
+#| msgid "%1, %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# translation of kdelibs4.po to Hindi
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Ravishankar Shrivastava <raviratlami@yahoo.com>, 2007.
+# Ravishankar Shrivastava <raviratlami@aol.in>, 2008, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2009-02-10 20:44+0530\n"
+"Last-Translator: Ravishankar Shrivastava <raviratlami@aol.in>\n"
+"Language-Team: Hindi <kde-i18n-doc@lists.kde.org>\n"
+"Language: hi\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"X-Generator: Lokalize 0.2\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"ये प्रोग्राम बर कोनो लाइसेंस के सर्त निरधारित नइ हे.\n"
+"किरपा करके, लाइसेंस सर्त मन बर\n"
+"कागद या स्रोत देखव.\n"
+
+#: lib/kaboutdata.cpp:306
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "ये प्रोग्राम %1 सर्त के अधीन वितरित कर दे गे हे."
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "जीपीएल सं.२"
+
+#: lib/kaboutdata.cpp:353
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "जीएनयू जनरल पब्लिक लाइसेंस संस्करन २"
+
+#: lib/kaboutdata.cpp:356
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "एलजीपीएल सं.२"
+
+#: lib/kaboutdata.cpp:357
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "जीएनयू लेसर जनरल पब्लिक लाइसेंस संस्करन २"
+
+#: lib/kaboutdata.cpp:360
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "बीएसडी लाइसेंस"
+
+#: lib/kaboutdata.cpp:361
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "बीएसडी लाइसेंस"
+
+#: lib/kaboutdata.cpp:364
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "आर्टिस्टिक लाइसेंस"
+
+#: lib/kaboutdata.cpp:365
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "आर्टिस्टिक लाइसेंस"
+
+#: lib/kaboutdata.cpp:368
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "क्यूपीएल सं.1.0"
+
+#: lib/kaboutdata.cpp:369
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "क्यू पब्लिक लाइसेंस"
+
+#: lib/kaboutdata.cpp:372
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "जीपीएल सं.३"
+
+#: lib/kaboutdata.cpp:373
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "जीएनयू जनरल पब्लिक लाइसेंस संस्करन ३"
+
+#: lib/kaboutdata.cpp:376
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "एलजीपीएल सं.३"
+
+#: lib/kaboutdata.cpp:377
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "जीएनयू जनरल पब्लिक लाइसेंस संस्करन ३"
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "एलजीपीएल सं.२"
+
+#: lib/kaboutdata.cpp:381
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "जीएनयू लेसर जनरल पब्लिक लाइसेंस संस्करन २"
+
+#: lib/kaboutdata.cpp:385
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "मनमाफिक"
+
+#: lib/kaboutdata.cpp:388
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "निरधारित नइ"
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>केडीई बहुत अकन भाखा मं अनुवाद करे गे हे. एखर बर विस्व भर के अनुवादक मन के टोली मन ल "
+"हार्दिक धन्यवाद.</p><p>केडीई के अंतररास्ट्रीयकरन परिचय अउ अधिक जानकारी बर इहां जाव: "
+"<a href=\"http://l10n.kde.org\">http://l10n.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1165
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "लेखक के जानकारी देखाव"
+
+#: lib/kaboutdata.cpp:1166
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "लाइसेंस के जानकारी देखाव"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+#, fuzzy
+#| msgid "Filename Error"
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "फाइल नाम गलती"
+
+#: lib/kaboutdata.cpp:1178
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "ये अनुपरयोग ल कोनो अइसन मनखे ह लिखे हे जऊन ह बेनाम बने रहना चाहथे."
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 ल \n"
+"%2 के साथ लिखे गिस"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "किरपा करके, http://bugs.kde.org के उपयोग बग रिपोट बर करव.\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "किरपा करके, बग रपट %1 ल भेजव.\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "लाइब्रेरी %1 केडीई ४ कम्पेटिबल फैक्टरी प्रदान नइ करे."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "बिहिनियाँ"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "मंझनियाँ"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "बिहिनियाँ"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "खम"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "मई"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "तिर"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "संपादन"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "जमा करव"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "बिहिनियाँ"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 बा."
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 बा."
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 मे.बा."
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 गी.बा."
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 टे.बा."
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 बा."
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 बा."
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 बा."
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 बा."
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 बा."
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, fuzzy, qt-format
+#| msgid "%1 KiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 कि.बा."
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 मे.बा."
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 गी.बा."
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 टे.बा."
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 बा."
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 बा."
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 बा."
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 बा."
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 बा."
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, fuzzy, qt-format
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 कि.बा."
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 मे.बा."
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 गी.बा."
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 टे.बा."
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 टे.बा."
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 टे.बा."
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 टे.बा."
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 टे.बा."
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, fuzzy, qt-format
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 दिन"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, fuzzy, qt-format
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 घंटा"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 मिनट"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, fuzzy, qt-format
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 सेकन्ड"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgid "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 मिलिस-सेकन्ड्स"
+msgstr[1] "%1 मिलिस-सेकन्ड्स"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 दिन"
+msgstr[1] "%1 दिन"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 घंटा"
+msgstr[1] "%1 घंटा"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 मिनट"
+msgstr[1] "%1 मिनट"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 सेकन्ड"
+msgstr[1] "%1 सेकन्ड"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 अउ %2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "अवैध फाइल नाम"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "आज"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "कल"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "अगला महिना"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "मंगलवार"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "बुधवार"
+
+#: lib/util/kformatprivate.cpp:535
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "बिरसपतवार"
+
+#: lib/util/kformatprivate.cpp:537
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "सुकरवार"
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "सनिवार"
+
+#: lib/util/kformatprivate.cpp:541
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "इतवार"
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "अगला महिना"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "मंगलवार"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "बुधवार"
+
+#: lib/util/kformatprivate.cpp:552
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "बिरसपतवार"
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "सुकरवार"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "सनिवार"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "इतवार"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1 %2"
--- /dev/null
+# Translation of kdelibs4 to Croatian
+#
+# Renato Pavicic <renato@translator-shop.org>, 2006.
+# Zarko Pintar <zarko.pintar@gmail.com>, 2009.
+# Marko Dimjasevic <marko@dimjasevic.net>, 2009, 2010, 2011.
+# Andrej Dundović <adundovi@gmail.com>, 2009, 2010.
+# DoDo <DoDoEntertainment@gmail.com>, 2009.
+# Andrej Dundovic <andrej@dundovic.com.hr>, 2009, 2010, 2011.
+# Marko Dimjašević <marko@dimjasevic.net>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2011-08-18 04:06+0200\n"
+"PO-Revision-Date: 2011-07-22 16:08+0200\n"
+"Last-Translator: Marko Dimjašević <marko@dimjasevic.net>\n"
+"Language-Team: Croatian <kde-croatia-list@lists.sourceforge.net>\n"
+"Language: hr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Generator: Lokalize 1.2\n"
+"X-Poedit-Language: Croatian\n"
+"X-Poedit-Country: CROATIA\n"
+"X-Poedit-Bookmarks: 1601,-1,-1,-1,-1,-1,-1,-1,-1,-1\n"
+"X-Environment: kde\n"
+"X-Accelerator-Marker: &\n"
+"X-Text-Markup: kde4\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Za ovaj program nema odredbi uvjeta licenciranja.\n"
+"Za uvjete licenciranja provjerite dokumentaciju ili\n"
+"izvorni kod.\n"
+
+#: lib/kaboutdata.cpp:306
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Ovaj program se distribuira pod uvjetima %1."
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License Version 2"
+
+#: lib/kaboutdata.cpp:356
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:360
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD Licenca"
+
+#: lib/kaboutdata.cpp:361
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD Licenca"
+
+#: lib/kaboutdata.cpp:364
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artistic licenca"
+
+#: lib/kaboutdata.cpp:365
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artistic licenca"
+
+#: lib/kaboutdata.cpp:368
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Javna Licenca"
+
+#: lib/kaboutdata.cpp:372
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License Version 3"
+
+#: lib/kaboutdata.cpp:376
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License Version 3"
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:381
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:385
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Prilagođeno"
+
+#: lib/kaboutdata.cpp:388
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Nije određeno"
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE je preveden na više jezika zahvaljujući radu prevoditeljskih timova u "
+"cijelom svijetu.</p><p>Za više informacija o internacionalizaciji KDE-a "
+"posjetite <a href=\"http://l10n.kde.org\">http://l10n.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1165
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Prikaži podatke o autoru"
+
+#: lib/kaboutdata.cpp:1166
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Prikaži podatke o licenci"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1178
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Ovu aplikaciju je napisao netko tko želi ostati anoniman."
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 je napisao:\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Nedostatke prijavite na adresi http://bugs.kde.org\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Nedostatke prijavite na adresi %1\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Biblioteka %1 ne nudi KDE 4 kompatibilnu radionicu."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "pm"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "AM"
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "@action"
+#| msgid "Mail"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Pošta"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "@item Text character set"
+#| msgid "Thai"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Thai"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Uredi"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Pošalji"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, fuzzy, qt-format
+#| msgctxt "memory size in 1024 bytes"
+#| msgid "%1 KB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, fuzzy, qt-format
+#| msgctxt "size in 1024 bytes"
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, fuzzy, qt-format
+#| msgctxt "size in 2^20 bytes"
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, fuzzy, qt-format
+#| msgctxt "size in 2^30 bytes"
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, fuzzy, qt-format
+#| msgctxt "size in 2^50 bytes"
+#| msgid "%1 PiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, fuzzy, qt-format
+#| msgctxt "size in 2^60 bytes"
+#| msgid "%1 EiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, fuzzy, qt-format
+#| msgctxt "size in 2^70 bytes"
+#| msgid "%1 ZiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, fuzzy, qt-format
+#| msgctxt "size in 2^80 bytes"
+#| msgid "%1 YiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 dana"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 sata"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minuta"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 sekunda"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 millisekunda"
+msgstr[1] "%1 millisekunda"
+msgstr[2] "%1 millisekunda"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 dana"
+msgstr[1] "%1 dana"
+msgstr[2] "%1 dana"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 sata"
+msgstr[1] "%1 sata"
+msgstr[2] "%1 sata"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 minuta"
+msgstr[1] "%1 minuta"
+msgstr[2] "%1 minuta"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 sekunda"
+msgstr[1] "%1 sekunda"
+msgstr[2] "%1 sekunda"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 i %2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+#| msgid "Invalid item."
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Neispravna stavka."
+
+#: lib/util/kformatprivate.cpp:519
+#, fuzzy
+#| msgctxt "@option tomorrow"
+#| msgid "Tomorrow"
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Sutra"
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Danas"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Jučer"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+#| msgctxt "@option last month"
+#| msgid "Last Month"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Prošli mjesec"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+#| msgctxt "@option last year"
+#| msgid "Last Year"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "Prošle godine"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+#| msgctxt ""
+#| "referring to a filter on the modification and usage date of files/"
+#| "resources"
+#| msgid "Last Week"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Prošlog tjedna"
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+#| msgctxt "@option last year"
+#| msgid "Last Year"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "Prošle godine"
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+#| msgctxt "@option next month"
+#| msgid "Next Month"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Sljedeći mjesec"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Sljedeća godina"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+#| msgctxt "@option next week"
+#| msgid "Next Week"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Sljedeći tjedan"
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Sljedeća godina"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Sljedeća godina"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Sljedeća godina"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, fuzzy, qt-format
+#| msgctxt "City, Country"
+#| msgid "%1, %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# translation of kdelibs4.po to Upper Sorbian
+# translation of kdelibs4.po to
+# Copyright (C) 2003,2004, 2005, 2007 Free Software Foundation, Inc.
+# Eduard Werner <e.werner@rz.uni-leipzig.de>, 2003.
+# Prof. Dr. Eduard Werner <e.werner@rz.uni-leipzig.de>, 2003,2004.
+# Eduard Werner <edi.werner@gmx.de>, 2005.
+# Eduard Werner/Edward Wornar <edi.werner@gmx.de>, 2007, 2008.
+# Bianka Šwejdźic <hertn@gmx.de>, 2007, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2008-12-19 22:49+0100\n"
+"Last-Translator: Eduard Werner <edi.werner@gmx.de>\n"
+"Language-Team: en_US <kde-i18n-doc@lists.kde.org>\n"
+"Language: hsb\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n"
+"%100==4 ? 2 : 3;\n"
+"X-Generator: KAider 0.1\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Za tutón program nimam žane licensowe wuměnjenja.\n"
+"Prošu přepruwuj dokumentaciju abo žórło licensowych\n"
+" wuměnjenjow dla.\n"
+
+#: lib/kaboutdata.cpp:306
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Program so dale dawa pod wuměnjenjemi w %1."
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License Version 2"
+
+#: lib/kaboutdata.cpp:356
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:360
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD Licensa"
+
+#: lib/kaboutdata.cpp:361
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD Licensa"
+
+#: lib/kaboutdata.cpp:364
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artistic License"
+
+#: lib/kaboutdata.cpp:365
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artistic License"
+
+#: lib/kaboutdata.cpp:368
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public License"
+
+#: lib/kaboutdata.cpp:372
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License Version 3"
+
+#: lib/kaboutdata.cpp:376
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License Version 3"
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:381
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:385
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Konfigurowane"
+
+#: lib/kaboutdata.cpp:388
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Njepostajene "
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE so dźakowano přełožowanskich skupin po cyłym swěće do wjele rěčow "
+"přełožuje. </p><p>Wjace informacije namakaće na <a href=\"http://l10n.kde.org"
+"\">http://l10n.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1165
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Pokaž informaciju wo awtorje"
+
+#: lib/kaboutdata.cpp:1166
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Pokaž informaciju wo licensy"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1178
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Tuta aplikacija bu napisana wot čłowjeka, kiž chce anonymny wostać."
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 bu napisane wot\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Prošu wužiwaj http://bugs.kde.org, zo by wo zmylku rozprawił.\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Prošu zdźělće zmylki tu: '%1'.\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Biblioteka '%1' njeposkića factory, kiž je z KDE 4 kompatibelny."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "rano"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "popołdnju"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "rano"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Kha"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "mej"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tir"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Wobdźěłać"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Wotpósłać"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "rano"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1%2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MiB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GiB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TiB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, fuzzy, qt-format
+#| msgid "%1 KiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KiB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MiB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GiB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TiB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, fuzzy, qt-format
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 TiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, fuzzy, qt-format
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 dnjow"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, fuzzy, qt-format
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 hodźin"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 mjeńšin"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, fuzzy, qt-format
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 sekundow"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgid "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 milisekundow"
+msgstr[1] "%1 milisekundow"
+msgstr[2] "%1 milisekundow"
+msgstr[3] "%1 milisekundow"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 dnjow"
+msgstr[1] "%1 dnjow"
+msgstr[2] "%1 dnjow"
+msgstr[3] "%1 dnjow"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 hodźin"
+msgstr[1] "%1 hodźin"
+msgstr[2] "%1 hodźin"
+msgstr[3] "%1 hodźin"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 mjeńšin"
+msgstr[1] "%1 mjeńšin"
+msgstr[2] "%1 mjeńšin"
+msgstr[3] "%1 mjeńšin"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 sekundow"
+msgstr[1] "%1 sekundow"
+msgstr[2] "%1 sekundow"
+msgstr[3] "%1 sekundow"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 a %2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+#| msgctxt "@item Calendar system"
+#| msgid "Invalid Calendar Type"
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Njeznata protyka"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "dźensa"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "wčera"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Přichodny měsac"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "Wutora"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Srjeda"
+
+#: lib/util/kformatprivate.cpp:535
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "Štwórtk"
+
+#: lib/util/kformatprivate.cpp:537
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "Pjatk"
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "Sobota"
+
+#: lib/util/kformatprivate.cpp:541
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "Njedźela"
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Přichodny měsac"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Wutora"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Srjeda"
+
+#: lib/util/kformatprivate.cpp:552
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "Štwórtk"
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Pjatk"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Sobota"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Njedźela"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1%2"
--- /dev/null
+# Kiszel Kristóf <ulysses@kubuntu.org>, 2010.
+# Kristóf Kiszel <ulysses@kubuntu.org>, 2010, 2011, 2012, 2014.
+# Balázs Úr <urbalazs@gmail.com>, 2012, 2013.
+# Kristof Kiszel <kiszel.kristof@gmail.com>, 2018.
+msgid ""
+msgstr ""
+"Project-Id-Version: KDE 4.4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2018-10-14 15:44+0200\n"
+"Last-Translator: Kristof Kiszel <kiszel.kristof@gmail.com>\n"
+"Language-Team: Hungarian <kde-l10n-hu@kde.org>\n"
+"Language: hu\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Lokalize 2.0\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Ennek a programnak a licencfeltételei nincsenek meghatározva.\n"
+"Nézze meg a program dokumentációját és forráskódját a licencelési\n"
+"feltételekért.\n"
+
+#: lib/kaboutdata.cpp:306
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Ez a program a(z) %1 jogi feltételeinek megfelelően használható."
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License 2-es verzió"
+
+#: lib/kaboutdata.cpp:356
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License 2-es verzió"
+
+#: lib/kaboutdata.cpp:360
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD licenc"
+
+#: lib/kaboutdata.cpp:361
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD licenc"
+
+#: lib/kaboutdata.cpp:364
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Művészi licenc"
+
+#: lib/kaboutdata.cpp:365
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Művészi licenc"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q nyilvános licenc"
+
+#: lib/kaboutdata.cpp:372
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License 3-as verzió"
+
+#: lib/kaboutdata.cpp:376
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License 3-as verzió"
+
+#: lib/kaboutdata.cpp:380
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:381
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License 2.1-es verzió"
+
+#: lib/kaboutdata.cpp:385
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Egyedi"
+
+#: lib/kaboutdata.cpp:388
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Nincs megadva"
+
+#: lib/kaboutdata.cpp:937
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>A KDE grafikus környezet számos nyelven használható. A projektben "
+"közreműködő magyar fordítók munkájának köszönhetően a KDE teljes egészében "
+"le van fordítva magyarra.</p><p>A KDE magyar fordításáról és az alkalmazások "
+"lokalizációjáról további információ található itt: <a href=\"https://l10n."
+"kde.org\">https://l10n.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1165
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "A szerző(k) nevének megjelenítése."
+
+#: lib/kaboutdata.cpp:1166
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "A licencinformáció megjelenítése."
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Az alkamazás asztali bejegyzésének fájlneve."
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "fájlnév"
+
+#: lib/kaboutdata.cpp:1178
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Az alkalmazás szerzője nem kívánta feltüntetni a nevét."
+
+#: lib/kaboutdata.cpp:1180
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "A(z) %1 készítőinek névsora:"
+
+#: lib/kaboutdata.cpp:1191
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr ""
+"Kérjük, hogy a talált hibákat jelentse be a https://bugs.kde.org címen."
+
+#: lib/kaboutdata.cpp:1193
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Kérjük, hogy a talált hibákat jelentse be itt: %1."
+
+#: lib/plugin/kpluginloader.cpp:122
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "A(z) %1 programkönyvtár nem tartalmaz KPluginFactoryt."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "de"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "du"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "de"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "de."
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "@action"
+#| msgid "Mail"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "E-mail"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "@item Text character set"
+#| msgid "Thai"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Thai"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "du."
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "du."
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Szerkesztés"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Elküldés"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "de"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2.%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h%2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2m%3.%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 nap"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 óra"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 perc"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 másodperc"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n ezredmásodperc"
+msgstr[1] "%n ezredmásodperc"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n nap"
+msgstr[1] "%n nap"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n óra"
+msgstr[1] "%n óra"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n perc"
+msgstr[1] "%n perc"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n másodperc"
+msgstr[1] "%n másodperc"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 és %2"
+
+#: lib/util/kformatprivate.cpp:509
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Érvénytelen dátum"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Holnap"
+
+#: lib/util/kformatprivate.cpp:521
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Ma"
+
+#: lib/util/kformatprivate.cpp:523
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Tegnap"
+
+#: lib/util/kformatprivate.cpp:529
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Előző hétfő"
+
+#: lib/util/kformatprivate.cpp:531
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "Előző kedd"
+
+#: lib/util/kformatprivate.cpp:533
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Előző szerda"
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "Előző csütörtök"
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "Előző péntek"
+
+#: lib/util/kformatprivate.cpp:539
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "Előző szombat"
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "Előző vasárnap"
+
+#: lib/util/kformatprivate.cpp:546
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Következő hétfő"
+
+#: lib/util/kformatprivate.cpp:548
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Következő kedd"
+
+#: lib/util/kformatprivate.cpp:550
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Következő szerda"
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "Következő csütörtök"
+
+#: lib/util/kformatprivate.cpp:554
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Következő péntek"
+
+#: lib/util/kformatprivate.cpp:556
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Következő szombat"
+
+#: lib/util/kformatprivate.cpp:558
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Következő vasárnap"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# KDE - kdelibs/kdelibs4.po Armenian translation.
+# Copyright (C) 2005, KDE Armenian translation team.
+#
+# Davit Nikoghosyan <nikdavnik@mail.ru>, 2013
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2013-01-31 01:08+0400\n"
+"Last-Translator: Davit <nikdavnik@mail.ru>\n"
+"Language-Team: Armenian Language: hy\n"
+"Language: hy\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.5.4\n"
+"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n"
+"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Environment: kde\n"
+"X-Accelerator-Marker: &\n"
+"X-Text-Markup: kde4\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Տվյալ ծրագրի լիցենզիան չի նշված։\n"
+"Հնարավոր է այն նշված է փասթաթղթերում կամ ծրագրի նախնական նիշքերում։\n"
+
+#: lib/kaboutdata.cpp:306
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Ծրագիրը տարածվում է ըստ պայմանների %1."
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License, վերսիա 2"
+
+#: lib/kaboutdata.cpp:356
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License, վերսիա 2"
+
+#: lib/kaboutdata.cpp:360
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Լիցենզիա BSD"
+
+#: lib/kaboutdata.cpp:361
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Լիցենզիա BSD"
+
+#: lib/kaboutdata.cpp:364
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artistic License"
+
+#: lib/kaboutdata.cpp:365
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artistic License"
+
+#: lib/kaboutdata.cpp:368
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public License"
+
+#: lib/kaboutdata.cpp:372
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License, версия 3"
+
+#: lib/kaboutdata.cpp:376
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License, версия 3"
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:381
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License, վերսիա 2"
+
+#: lib/kaboutdata.cpp:385
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Այլ լիցենզիա"
+
+#: lib/kaboutdata.cpp:388
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Լիցենզիան նշված չէ"
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE թարգմանվել է մի շարք լեզուներով տարբեր երկրներում աշխատող մի շարք "
+"թարգմանող խմբերի շնորհիվ։</p><p>KDE թարգմանության մասին լրացուցիչ ինֆորմացիա "
+"ստանալու համար այցելեք <a href=\"http://l10n.kde.org\">l10n.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1165
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Տալ տեղեկություն հեղինակի մասին"
+
+#: lib/kaboutdata.cpp:1166
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Տալ տեղեկություն լիցենզիայի մասին"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1178
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Ծրագրի հեղինակը ցանկացել է մնալ անհայտ։"
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 գրել են:\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Օգտագործեք http://bugs.kde.org սխալների մասին տեղեկացնելու համար։\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Օգտագործեք %1 սխալների մասին տեղեկացնելու համար։\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr ""
+"%1 գրադարանը չի տրամադրում տարրերի ստեղծման մեխանիզմ, որը համապատասխանում է "
+"KDE 4։"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "pm"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgctxt "Coptic month 4 - ShortName"
+#| msgid "Kia"
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "хам"
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "AM"
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "Ethiopian month 8 - ShortName"
+#| msgid "Miy"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Май"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Тир"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ճշտում"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Ուղարկել"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 Բ"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 ԿԲ"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 ՄԲ"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 ԳԲ"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 ՏԲ"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 ՊԲ"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 ԵԲ"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ԶԲ"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 ԻԲ"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 Բ"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, fuzzy, qt-format
+#| msgctxt "memory size in 1024 bytes"
+#| msgid "%1 KB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 ԿԲ"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 ՄԲ"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 ԳԲ"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 ՏԲ"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 ՊԲ"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 ԵԲ"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ԶԲ"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 ԻԲ"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 Բ"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, fuzzy, qt-format
+#| msgctxt "size in 1024 bytes"
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 ԿիԲ"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, fuzzy, qt-format
+#| msgctxt "size in 2^20 bytes"
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 ՄիԲ"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, fuzzy, qt-format
+#| msgctxt "size in 2^30 bytes"
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 ԳիԲ"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 ՏիԲ"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, fuzzy, qt-format
+#| msgctxt "size in 2^50 bytes"
+#| msgid "%1 PiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 ՊիԲ"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, fuzzy, qt-format
+#| msgctxt "size in 2^60 bytes"
+#| msgid "%1 EiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 ԵիԲ"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, fuzzy, qt-format
+#| msgctxt "size in 2^70 bytes"
+#| msgid "%1 ZiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ԶիԲ"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, fuzzy, qt-format
+#| msgctxt "size in 2^80 bytes"
+#| msgid "%1 YiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 ԻիԲ"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 օրեր"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 ժամեր"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 րոպեներ"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 վարկյաններ"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 միլիվարկյան"
+msgstr[1] "%1 միլիվարկյան"
+msgstr[2] "%1 միլիվարկյան"
+msgstr[3] "%1 միլիվարկյան"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 օրեր"
+msgstr[1] "%1 օրեր"
+msgstr[2] "%1 օրեր"
+msgstr[3] "%1 օրեր"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 ժամեր"
+msgstr[1] "%1 ժամեր"
+msgstr[2] "%1 ժամեր"
+msgstr[3] "%1 ժամեր"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 րոպեներ"
+msgstr[1] "%1 րոպեներ"
+msgstr[2] "%1 րոպեներ"
+msgstr[3] "%1 րոպեներ"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 վարկյաններ"
+msgstr[1] "%1 վարկյաններ"
+msgstr[2] "%1 վարկյաններ"
+msgstr[3] "%1 վարկյաններ"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 և %2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+#| msgid "Invalid item."
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Չհամապատասխանող տարր։"
+
+#: lib/util/kformatprivate.cpp:519
+#, fuzzy
+#| msgctxt "@option tomorrow"
+#| msgid "Tomorrow"
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Վաղը"
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Այսօր"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Երեկ"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+#| msgctxt "@option last month"
+#| msgid "Last Month"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Մի ամիս առաջ"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "Вторник"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Среда"
+
+#: lib/util/kformatprivate.cpp:535
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "Четверг"
+
+#: lib/util/kformatprivate.cpp:537
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "Пятница"
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "Суббота"
+
+#: lib/util/kformatprivate.cpp:541
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "Воскресенье"
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+#| msgctxt "@option next month"
+#| msgid "Next Month"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Հաջորդ ամիս"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Вторник"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Среда"
+
+#: lib/util/kformatprivate.cpp:552
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "Четверг"
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Пятница"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Суббота"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Воскресенье"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, fuzzy, qt-format
+#| msgctxt "City, Country"
+#| msgid "%1, %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# g.sora <g.sora@tiscali.it>, 2010, 2011, 2012, 2013, 2014, 2017.
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2017-01-24 22:59+0100\n"
+"Last-Translator: giovanni <g.sora@tiscali.it>\n"
+"Language-Team: Interlingua <kde-i18n-it@kde.org>\n"
+"Language: ia\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Lokalize 2.0\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Le terminos de licentia pro iste programma non ha essite specificate.\n"
+"Pro favor tu controla la documentation o le fonte per omne\n"
+"le terminos de licentia.\n"
+
+#: lib/kaboutdata.cpp:306
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Iste programma es distribuite sub le termino de le %1."
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "Licentia GNU General Public Version 2"
+
+#: lib/kaboutdata.cpp:356
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "Licentia GNU Lesser General Public Version 2"
+
+#: lib/kaboutdata.cpp:360
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Licentia BSD"
+
+#: lib/kaboutdata.cpp:361
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Licentia BSD"
+
+#: lib/kaboutdata.cpp:364
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artistic License (Licentia Artistic)"
+
+#: lib/kaboutdata.cpp:365
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artistic License (Licentia Artistic)"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public License (Public Licentia Q)"
+
+#: lib/kaboutdata.cpp:372
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "Licentia GNU General Public Version 3"
+
+#: lib/kaboutdata.cpp:376
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "Licentia GNU Lesser General Public Version 3"
+
+#: lib/kaboutdata.cpp:380
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:381
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "Licentia GNU Lesser General Public Version 2.1"
+
+#: lib/kaboutdata.cpp:385
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Personalisate"
+
+#: lib/kaboutdata.cpp:388
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Non specificate"
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt ""
+#| "KAboutData|replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE es traducite in multe linguas gratias a le labor de le equipas de "
+"traduction de tote le mundo.</p><p> Pro informationes additional super le "
+"internationalisation de KDE tu visita <a href=\"http://l10n.kde.org\">http://"
+"l10.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1165
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Monstra information del autor"
+
+#: lib/kaboutdata.cpp:1166
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Monstra information del licentia"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+"Le nomine del file basic del ingresso de scriptorio per iste application."
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "nomine de file"
+
+#: lib/kaboutdata.cpp:1178
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Iste application esseva scribite per alicuno que vole remaner anonymo"
+
+#: lib/kaboutdata.cpp:1180
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 esseva scribite per:"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgctxt "KAboutData CLI|"
+#| msgid "Please use http://bugs.kde.org to report bugs."
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Pro favor tu usa http://bugs.kde.org per reportar bugs."
+
+#: lib/kaboutdata.cpp:1193
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Pro favor tu reporta bugs a %1."
+
+#: lib/plugin/kpluginloader.cpp:122
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Le bibliotheca %1 non offere un KPluginFactory"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "pm"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "AM"
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "@action"
+#| msgid "Mail"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Invia (Mail)"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "@item Text character set"
+#| msgid "Thai"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Thai"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Edita"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Submitte"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2.%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h %2m "
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2m %3.%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 dies"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 horas"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minutas"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 secundas"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n millisecond(s)"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n millisecunda(s)"
+msgstr[1] "%n millisecunda(s)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n day(s)"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n die(s)"
+msgstr[1] "%n die(s)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n hour(s)"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n hora(s)"
+msgstr[1] "%n hora(s)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n minute(s)"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minuta(s)"
+msgstr[1] "%n minuta(s)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n second(s)"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n secunda(s)"
+msgstr[1] "%n secunda(s)"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 e %2"
+
+#: lib/util/kformatprivate.cpp:509
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Data invalide"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Deman"
+
+#: lib/util/kformatprivate.cpp:521
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Hodie"
+
+#: lib/util/kformatprivate.cpp:523
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Heri"
+
+#: lib/util/kformatprivate.cpp:529
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Ultime Lunedi"
+
+#: lib/util/kformatprivate.cpp:531
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "Ultime Martedi"
+
+#: lib/util/kformatprivate.cpp:533
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Ultime Mercuridi"
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "Ultime Jovedi"
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "Ultime Venerdi"
+
+#: lib/util/kformatprivate.cpp:539
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "Ultime Sabbato"
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "Ultime Dominica"
+
+#: lib/util/kformatprivate.cpp:546
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Proxime Lunedi"
+
+#: lib/util/kformatprivate.cpp:548
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Proxime Martedi"
+
+#: lib/util/kformatprivate.cpp:550
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Proxime Mercuridi"
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "Proxime Jovedi"
+
+#: lib/util/kformatprivate.cpp:554
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Proxime Venerdi"
+
+#: lib/util/kformatprivate.cpp:556
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Proxime Sabbato"
+
+#: lib/util/kformatprivate.cpp:558
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Proxime Dominica"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# Indonesian translations for kdelibs4 package.
+# Copyright (C) 2010 This_file_is_part_of_KDE
+# This file is distributed under the same license as the kdelibs4 package.
+# Andhika Padmawan <andhika.padmawan@gmail.com>, 2010-2014.
+# Wantoyo <wantoyek@gmail.com>, 2017, 2018.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2018-12-15 06:56+0700\n"
+"Last-Translator: Wantoyo <wantoyek@gmail.com>\n"
+"Language-Team: Indonesian <kde-i18n-doc@kde.org>\n"
+"Language: id\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Lokalize 2.0\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Tak ada perjanjian lisensi yang telah ditentukan untuk program ini.\n"
+"Silakan cek dokumentasi atau sumber untuk perjanjian\n"
+"lisensi apapun.\n"
+
+#: lib/kaboutdata.cpp:306
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Program ini didistribusikan di bawah perjanjian %1."
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "Lisensi Publik Umum GNU Versi 2"
+
+#: lib/kaboutdata.cpp:356
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "Lisensi Publik Umum Lebih Kecil Versi 2"
+
+#: lib/kaboutdata.cpp:360
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Lisensi BSD"
+
+#: lib/kaboutdata.cpp:361
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Lisensi BSD"
+
+#: lib/kaboutdata.cpp:364
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Lisensi Artistik"
+
+#: lib/kaboutdata.cpp:365
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Lisensi Artistik"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Lisensi Publik Q"
+
+#: lib/kaboutdata.cpp:372
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License Versi 3"
+
+#: lib/kaboutdata.cpp:376
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License Versi 3"
+
+#: lib/kaboutdata.cpp:380
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:381
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License Versi 2.1"
+
+#: lib/kaboutdata.cpp:385
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Kustom"
+
+#: lib/kaboutdata.cpp:388
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Enggak ditentukan"
+
+#: lib/kaboutdata.cpp:937
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE diterjemahkan ke dalam banyak bahasa berkat usaha dari tim penerjemah "
+"dari seluruh dunia.</p><p>Untuk informasi selebihnya tentang "
+"internasionalisasi KDE silakan kunjungi <a href=\"https://l10n.kde.org"
+"\">https://l10n.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1165
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Tampilkan informasi penulis."
+
+#: lib/kaboutdata.cpp:1166
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Tampilkan informasi lisensi."
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Nama file dasar dari seluruh desktop untuk aplikasi ini."
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "nama file "
+
+#: lib/kaboutdata.cpp:1178
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Aplikasi ini ditulis oleh seseorang yang ingin tetap menjadi anonim."
+
+#: lib/kaboutdata.cpp:1180
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 ditulis oleh:"
+
+#: lib/kaboutdata.cpp:1191
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Silakan gunakan https://bugs.kde.org untuk melaporkan bug."
+
+#: lib/kaboutdata.cpp:1193
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Silakan laporkan bug ke %1."
+
+#: lib/plugin/kpluginloader.cpp:122
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Pustaka %1 tidak menawarkan KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "y"
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "z"
+
+#: lib/util/kformatprivate.cpp:118
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "a"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "f"
+
+#: lib/util/kformatprivate.cpp:120
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "p"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "µ"
+
+#: lib/util/kformatprivate.cpp:123
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "k"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Ki"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "M"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mi"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Gi"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "T"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ti"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pi"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "E"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ei"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "Z"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Zi"
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:140
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "bit"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B"
+
+#: lib/util/kformatprivate.cpp:146
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Hz"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2.%3d"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2d"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h%2d"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1j%2m%3.%4d"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1j%2m%3d"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 hari"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 jam"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 menit"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 detik"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n milidetik"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n hari"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n jam"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n menit"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n detik"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 dan %2"
+
+#: lib/util/kformatprivate.cpp:509
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Tanggal tidak absah"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Besok"
+
+#: lib/util/kformatprivate.cpp:521
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Hari Ini"
+
+#: lib/util/kformatprivate.cpp:523
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Kemarin"
+
+#: lib/util/kformatprivate.cpp:529
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Senin Lalu"
+
+#: lib/util/kformatprivate.cpp:531
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "Selasa Lalu"
+
+#: lib/util/kformatprivate.cpp:533
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Rabu Lalu"
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "Kamis Lalu"
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "Jumat Lalu"
+
+#: lib/util/kformatprivate.cpp:539
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "Sabtu Lalu"
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "Minggu Lalu"
+
+#: lib/util/kformatprivate.cpp:546
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Senin Depan"
+
+#: lib/util/kformatprivate.cpp:548
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Selasa Depan"
+
+#: lib/util/kformatprivate.cpp:550
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Rabu Depan"
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "Kamis Depan"
+
+#: lib/util/kformatprivate.cpp:554
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Jumat Depan"
+
+#: lib/util/kformatprivate.cpp:556
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Sabtu Depan"
+
+#: lib/util/kformatprivate.cpp:558
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Minggu Depan"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# translation of kdelibs4.po to Icelandic
+# íslensk þýðing á kdelibs4.po
+# Copyright (C) 1998,2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
+#
+# Logi Ragnarsson <logi@logi.org>, 1998-2003.
+# Richard Allen <ra@ra.is>, 1998-2004.
+# Pjetur G. Hjaltason <pjetur@pjetur.net>, 2003.
+# Arnar Leósson <leosson@frisurf.no>, 2003, 2005.
+# Sveinn í Felli <sveinki@nett.is>, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2018.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2018-01-04 15:49+0000\n"
+"Last-Translator: Sveinn í Felli <sv1@fellsnet.is>\n"
+"Language-Team: Icelandic <translation-team-is@lists.sourceforge.net>\n"
+"Language: is\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.5\n"
+"Plural-Forms: Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Ekki er búið að skilgreina notkunarleyfi fyrir þetta forrit.\n"
+"Vinsamlegast athugaðu frumkóðann eða leiðbeiningarnar með því\n"
+"til að finna höfundarréttarupplýsingar.\n"
+
+#: lib/kaboutdata.cpp:306
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Þessu forriti er dreift skv. skilmálum %1."
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public notkunarskilmálar útgáfa 2"
+
+#: lib/kaboutdata.cpp:356
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public notkunarskilmálar útgáfa 2"
+
+#: lib/kaboutdata.cpp:360
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD notkunarskilmálar"
+
+#: lib/kaboutdata.cpp:361
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD notkunarskilmálar"
+
+#: lib/kaboutdata.cpp:364
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Listrænir notkunarskilmálar (Artistic)"
+
+#: lib/kaboutdata.cpp:365
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Listrænir notkunarskilmálar (Artistic)"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL útgáfa 1.0"
+
+#: lib/kaboutdata.cpp:369
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q almennir skilmálar (QPL)"
+
+#: lib/kaboutdata.cpp:372
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public notkunarskilmálar útgáfa 3"
+
+#: lib/kaboutdata.cpp:376
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public notkunarskilmálar útgáfa 3"
+
+#: lib/kaboutdata.cpp:380
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:381
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public notkunarskilmálar útgáfa 2.1"
+
+#: lib/kaboutdata.cpp:385
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Sérsniðið"
+
+#: lib/kaboutdata.cpp:388
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Ekki skilgreint"
+
+#: lib/kaboutdata.cpp:937
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p> KDE er þýtt á mörg tungumál þökk sé vinnu þýðingahópa um allan heim, þar "
+"á meðal á Íslandi. </p><p> Frekari upplýsingar um þýðingar á KDE er að finna "
+"á <a href=\"https://l10n.kde.org\">https://l10n.kde.org</a> og sérstaklega "
+"um íslenskunina á <a href=\"https://www.is.kde.org/\">www.is.kde.org/</a></p>"
+
+#: lib/kaboutdata.cpp:1165
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Birta upplýsingar um höfund."
+
+#: lib/kaboutdata.cpp:1166
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Birta upplýsingar um notkunarleyfi"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Grunn-skráarheiti skjáborðsfærslu fyrir þetta forrit."
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "skráarheiti"
+
+#: lib/kaboutdata.cpp:1178
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Þetta forrit var skrifað af einhverjum sem óskar nafnleyndar."
+
+#: lib/kaboutdata.cpp:1180
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 var skrifað af:"
+
+#: lib/kaboutdata.cpp:1191
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Endilega notaðu https://bugs.kde.org til að senda inn villuskýrslur."
+
+#: lib/kaboutdata.cpp:1193
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Endilega tilkynntu um villur til %1."
+
+#: lib/plugin/kpluginloader.cpp:122
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Aðgerðasafnið %1 býður ekki upp á KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "f.h."
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "e.h."
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "f.h."
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "f.h."
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "@action"
+#| msgid "Mail"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Póstur"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "@item Text character set"
+#| msgid "Thai"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tælenskt"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "e"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "e"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Sýsl"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Senda"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "f.h."
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1min%2.%3sek"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1min%2sek"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1klst%2min"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1klst%2min%3.%4sek"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1klst%2min%3sek"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 dagar"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 klukkustundir"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 mínútur"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 sekúndur"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n millisekúnda"
+msgstr[1] "%n millisekúndur"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n dagur"
+msgstr[1] "%n dagar"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n klukkustund"
+msgstr[1] "%n klukkustundir"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n mínúta"
+msgstr[1] "%n mínútur"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n sekúnda"
+msgstr[1] "%n sekúndur"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 og %2"
+
+#: lib/util/kformatprivate.cpp:509
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Ógild dagsetning"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Á morgun"
+
+#: lib/util/kformatprivate.cpp:521
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Í dag"
+
+#: lib/util/kformatprivate.cpp:523
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Í gær"
+
+#: lib/util/kformatprivate.cpp:529
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Síðasti mánuður"
+
+#: lib/util/kformatprivate.cpp:531
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "Síðasta ár"
+
+#: lib/util/kformatprivate.cpp:533
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Síðasta miðvikudag"
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "Síðasta fimmtudag"
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "Síðasta föstudag"
+
+#: lib/util/kformatprivate.cpp:539
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "Síðasta laugardag"
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "Síðasta sunnudag"
+
+#: lib/util/kformatprivate.cpp:546
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Næsti mánudag"
+
+#: lib/util/kformatprivate.cpp:548
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Næsta þriðjudag"
+
+#: lib/util/kformatprivate.cpp:550
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Næsta miðvikudag"
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "Næsta fimmtudag"
+
+#: lib/util/kformatprivate.cpp:554
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Næsta föstudag"
+
+#: lib/util/kformatprivate.cpp:556
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Næsta laugardag"
+
+#: lib/util/kformatprivate.cpp:558
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Næsta sunnudag"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# translation of kdelibs4.po to Italian
+# Andrea Rizzi <rizzi@kde.org>, 2003, 2004, 2005.
+# Federico Cozzi <federicocozzi@federicocozzi.it>, 2004.
+# Federico Zenith <federico.zenith@member.fsf.org>, 2004, 2008, 2009, 2010, 2011.
+# Andrea Rizzi <Andrea.Rizzi@sns.it>, 2004.
+# Nicola Ruggero <nixprog.adsl@tiscali.it>, 2005, 2006.
+# Nicola Ruggero <nicola@nxnt.org>, 2006, 2007, 2010.
+# Luciano Montanaro <mikelima@cirulla.net>, 2007.
+# Dario Panico <Dareus_Persarumrex@fastwebnet.it>, 2008.
+# Pino Toscano <toscano.pino@tiscali.it>, 2008.
+# Federico Zenith <federico.zenith@member.fsf.org>, 2008, 2012, 2013, 2014, 2015.
+# Innocenzo Ventre <innocenzo.ventre@gmail.com>, 2012.
+# Vincenzo Reale <smart2128@baslug.org>, 2014, 2017, 2018.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2018-12-07 20:04+0100\n"
+"Last-Translator: Vincenzo Reale <smart2128@baslug.org>\n"
+"Language-Team: Italian <kde-i18n-it@kde.org>\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Lokalize 2.0\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Nessun tipo di licenza è stato specificato per questo programma.\n"
+"Controllare la documentazione o il codice sorgente per qualsiasi tipo di \n"
+"licenza.\n"
+
+#: lib/kaboutdata.cpp:306
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Questo programma è distribuito nei termini della licenza %1."
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "Licenza Pubblica Generica GNU, versione 2"
+
+#: lib/kaboutdata.cpp:356
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "Licenza Pubblica Generica Attenuata GNU, versione 2"
+
+#: lib/kaboutdata.cpp:360
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Licenza BSD"
+
+#: lib/kaboutdata.cpp:361
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Licenza BSD"
+
+#: lib/kaboutdata.cpp:364
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Licenza Artistica"
+
+#: lib/kaboutdata.cpp:365
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Licenza Artistica"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Licenza Pubblica Q"
+
+#: lib/kaboutdata.cpp:372
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "Licenza Pubblica Generica GNU, versione 3"
+
+#: lib/kaboutdata.cpp:376
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "Licenza Pubblica Generica Attenuata GNU, versione 3"
+
+#: lib/kaboutdata.cpp:380
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:381
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "Licenza Pubblica Generica Attenuata GNU, versione 2.1"
+
+#: lib/kaboutdata.cpp:385
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Personalizzata"
+
+#: lib/kaboutdata.cpp:388
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Non specificata"
+
+#: lib/kaboutdata.cpp:937
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE è tradotto in molte lingue grazie al lavoro dei vari gruppi di "
+"traduzione situati in tutto il mondo.</p><p>Per ulteriori informazioni sulla "
+"internazionalizzazione di KDE, visita il sito <a href=\"https://l10n.kde.org"
+"\">https://l10n.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1165
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Mostra le informazioni sull'autore."
+
+#: lib/kaboutdata.cpp:1166
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Mostra le informazioni sulla licenza."
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Il nome file della voce del desktop per questa applicazione."
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "nome file"
+
+#: lib/kaboutdata.cpp:1178
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr ""
+"Questa applicazione è stata scritta da qualcuno che vuole rimanere anonimo."
+
+#: lib/kaboutdata.cpp:1180
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 è stato scritto da:"
+
+#: lib/kaboutdata.cpp:1191
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Usa https://bugs.kde.org per segnalare gli errori."
+
+#: lib/kaboutdata.cpp:1193
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Segnala gli errori a %1."
+
+#: lib/plugin/kpluginloader.cpp:122
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "La libreria %1 non offre un KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "y"
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "z"
+
+#: lib/util/kformatprivate.cpp:118
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "a"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "f"
+
+#: lib/util/kformatprivate.cpp:120
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "p"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "µ"
+
+#: lib/util/kformatprivate.cpp:123
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "k"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Ki"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "M"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mi"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Gi"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "T"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ti"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pi"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "E"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ei"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "Z"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Zi"
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:140
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "bit"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B"
+
+#: lib/util/kformatprivate.cpp:146
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Hz"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2.%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h%2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2m%3.%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 giorni"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 ore"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minuti"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 secondi"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n millisecondo"
+msgstr[1] "%n millisecondi"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n giorno"
+msgstr[1] "%n giorni"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n ora"
+msgstr[1] "%n ore"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minuto"
+msgstr[1] "%n minuti"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n secondo"
+msgstr[1] "%n secondi"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 e %2"
+
+#: lib/util/kformatprivate.cpp:509
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Data non valida"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Domani"
+
+#: lib/util/kformatprivate.cpp:521
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Oggi"
+
+#: lib/util/kformatprivate.cpp:523
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Ieri"
+
+#: lib/util/kformatprivate.cpp:529
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Lunedì scorso"
+
+#: lib/util/kformatprivate.cpp:531
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "Martedì scorso"
+
+#: lib/util/kformatprivate.cpp:533
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Mercoledì scorso"
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "Giovedì scorso"
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "Venerdì scorso"
+
+#: lib/util/kformatprivate.cpp:539
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "Sabato scorso"
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "Domenica scorsa"
+
+#: lib/util/kformatprivate.cpp:546
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Lunedì prossimo"
+
+#: lib/util/kformatprivate.cpp:548
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Martedì prossimo"
+
+#: lib/util/kformatprivate.cpp:550
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Mercoledì prossimo"
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "Giovedì prossimo"
+
+#: lib/util/kformatprivate.cpp:554
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Venerdì prossimo"
+
+#: lib/util/kformatprivate.cpp:556
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Sabato prossimo"
+
+#: lib/util/kformatprivate.cpp:558
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Domenica prossima"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# Translation of kdelibs4 into Japanese.
+# This file is distributed under the same license as the kdelibs package.
+# Taiki Komoda <kom@kde.gr.jp>, 2002, 2004, 2006, 2010.
+# Noboru Sinohara <shinobo@leo.bekkoame.ne.jp>, 2004.
+# Toyohiro Asukai <toyohiro@ksmplus.com>, 2004.
+# Kurose Shushi <md81@bird.email.ne.jp>, 2004.
+# AWASHIRO Ikuya <ikuya@oooug.jp>, 2004.
+# Shinichi Tsunoda <tsuno@ngy.1st.ne.jp>, 2005.
+# Yukiko Bando <ybando@k6.dion.ne.jp>, 2006, 2007, 2008, 2009, 2010.
+# Fumiaki Okushi <okushi@kde.gr.jp>, 2006, 2007, 2008, 2010, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2011-08-27 14:05-0700\n"
+"Last-Translator: Fumiaki Okushi <okushi@kde.gr.jp>\n"
+"Language-Team: Japanese <kde-jp@kde.org>\n"
+"Language: ja\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Accelerator-Marker: &\n"
+"X-Text-Markup: qtrich\n"
+"X-Generator: Lokalize 1.1\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"このプログラムのライセンスについては、\n"
+"ドキュメントまたはソースを確認してください。\n"
+
+#: lib/kaboutdata.cpp:306
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "このプログラムは %1 のもとで配布されています。"
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License Version 2"
+
+#: lib/kaboutdata.cpp:356
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:360
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD License"
+
+#: lib/kaboutdata.cpp:361
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD License"
+
+#: lib/kaboutdata.cpp:364
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artistic License"
+
+#: lib/kaboutdata.cpp:365
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artistic License"
+
+#: lib/kaboutdata.cpp:368
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public License"
+
+#: lib/kaboutdata.cpp:372
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License Version 3"
+
+#: lib/kaboutdata.cpp:376
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License Version 3"
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:381
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:385
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "カスタム"
+
+#: lib/kaboutdata.cpp:388
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "指定なし"
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<html><p>KDE は世界中の翻訳チームの手によってさまざまな言語に翻訳されていま"
+"す。</p><p>KDE の国際化対応の詳細については <link>http://l10n.kde.org</link> "
+"をご覧ください。</p></html>"
+
+#: lib/kaboutdata.cpp:1165
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "著作者情報"
+
+#: lib/kaboutdata.cpp:1166
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "ライセンス情報を表示"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1178
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "このアプリケーションは匿名でありたい誰かによって書かれました。"
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"<application>%1</application> の作者:\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1191
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1193
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr ""
+
+#: lib/plugin/kpluginloader.cpp:122
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "ライブラリ %1 には KDE 4 互換のファクトリ機能はありません。"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr ""
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr ""
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, fuzzy, qt-format
+#| msgctxt "memory size in 1024 bytes"
+#| msgid "%1 KB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, fuzzy, qt-format
+#| msgctxt "size in 1024 bytes"
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, fuzzy, qt-format
+#| msgctxt "size in 2^20 bytes"
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, fuzzy, qt-format
+#| msgctxt "size in 2^30 bytes"
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, fuzzy, qt-format
+#| msgctxt "size in 2^50 bytes"
+#| msgid "%1 PiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, fuzzy, qt-format
+#| msgctxt "size in 2^60 bytes"
+#| msgid "%1 EiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, fuzzy, qt-format
+#| msgctxt "size in 2^70 bytes"
+#| msgid "%1 ZiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, fuzzy, qt-format
+#| msgctxt "size in 2^80 bytes"
+#| msgid "%1 YiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 日"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 時間"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 分"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 秒"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 ミリ秒"
+msgstr[1] "%1 ミリ秒"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 日"
+msgstr[1] "%1 日"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 時間"
+msgstr[1] "%1 時間"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 分"
+msgstr[1] "%1 分"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 秒"
+msgstr[1] "%1 秒"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 %2"
+
+#: lib/util/kformatprivate.cpp:509
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:519
+#, fuzzy
+#| msgctxt "@option tomorrow"
+#| msgid "Tomorrow"
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "明日"
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "今日"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "昨日"
+
+#: lib/util/kformatprivate.cpp:529
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:531
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:533
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:539
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:546
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:548
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:550
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:554
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:556
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:558
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr ""
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, fuzzy, qt-format
+#| msgctxt "City, Country"
+#| msgid "%1, %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1、%2"
--- /dev/null
+# KDE3 - Georgian translation of kdelibs4.po
+# Gia Shervashidze <giasher@telenet.ge>, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2009-12-17 02:11+0400\n"
+"Last-Translator: George Machitidze <giomac@gmail.com>\n"
+"Language-Team: Georgian <http://www.gia.ge>\n"
+"Language: ka\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.9\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"მოცემულ პროგრამაში ლიცენზია არ მითითებულა.\n"
+"გთხოვთ გადაამოწმოთ პირველწყარო შესაძლო\n"
+"სალიცენზიო პირობეის შესახებ.\n"
+
+#: lib/kaboutdata.cpp:306
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "პროგრამა ვრცელდება %1 სალიცენზიო პირობებით."
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgid "GPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:356
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:360
+#, fuzzy
+#| msgid "License:"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "ლიცენზია:"
+
+#: lib/kaboutdata.cpp:361
+#, fuzzy
+#| msgid "License:"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "ლიცენზია:"
+
+#: lib/kaboutdata.cpp:364
+#, fuzzy
+#| msgid "Public Key"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "საზოგადო კოდი"
+
+#: lib/kaboutdata.cpp:365
+#, fuzzy
+#| msgid "Public Key"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "საზოგადო კოდი"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr ""
+
+#: lib/kaboutdata.cpp:369
+#, fuzzy
+#| msgid "Public Key"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "საზოგადო კოდი"
+
+#: lib/kaboutdata.cpp:372
+#, fuzzy
+#| msgid "GPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:376
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:381
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr ""
+
+#: lib/kaboutdata.cpp:385
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "&შერჩევით"
+
+#: lib/kaboutdata.cpp:388
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "მომწოდებელი არ შერჩეულა."
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE მრავალ ენაზეა ნათარგმნი მთელი მსოფლიოს სხვადასხვა მთარგმნელთა "
+"ჯგუფების მიერ.</p><p>დამატებითი ინფორმაციისთვის KDE ინტერნაციონალიზაციის "
+"შესახებ ეწვიეთ http://i18n.kde.org</p><p>ქართული თარგმანის შესახებ "
+"ინფორმაცია შეგიძლიათ მიიღოთ პორტალზე http://www.gia.ge</p><p>იქვე გაიცნობთ "
+"გუნდს, რომელმაც KDE ქართულად თარგმნა და თუ მოისურვებთ, თავად შეძლებთ "
+"მონაწილეობის მიღებას.</p>"
+
+#: lib/kaboutdata.cpp:1165
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "ავტორის შესახებ ინფორმაციის ჩვენება"
+
+#: lib/kaboutdata.cpp:1166
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "კიცენზიის შესახებ ინფორმაციის ჩვენება"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+#, fuzzy
+#| msgid "Filename Error"
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "ფაილის შეცდომა"
+
+#: lib/kaboutdata.cpp:1178
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "პროგრამის ავტორმა ანონიმად დარჩენა მოისურვა."
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 - ავტორ(ებ)ი:\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "გთხოვთ გამოიყენოთ http://bugs.kde.org შეცდომების შეტყობინებისთვის.\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "გამოიყენეთ %1 შეცდომების შეტყობინებისთვის.\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer an %2 function."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "%1 ბიბლიოთეკა %2 ფუნქციას არ გთავაზობთ."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "pm"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Ok"
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "დიახ"
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgctxt "Coptic month 4 - ShortName"
+#| msgid "Kia"
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "ხამ"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "Ethiopian month 8 - ShortName"
+#| msgid "Miy"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "მაი"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "თირ"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "რედაქტირება"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "გაგზავნა"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1, %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1, %2"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1, %2"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1, %2"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1, %2"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1, %2"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1, %2"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1, %2"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1, %2"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1, %2"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1, %2"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1, %2"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1, %2"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1, %2"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1, %2"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1, %2"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1, %2"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1, %2"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1, %2"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1, %2"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1, %2"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1, %2"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1, %2"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1, %2"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1, %2"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1, %2"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1, %2"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1, %2"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, fuzzy, qt-format
+#| msgid "Monday"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "ორშაბათი"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 პარამეტრები"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 პარამეტრები"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 პარამეტრები"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgid "Monday"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "ორშაბათი"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] ""
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 პარამეტრები"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 პარამეტრები"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1, %2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "მცდარი ალმები"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+#| msgid "Monday"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "ორშაბათი"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "სამშაბათი"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "შემდეგი თვე"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "სამშაბათი"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "ოთხშაბათი"
+
+#: lib/util/kformatprivate.cpp:535
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "ხუთშაბათი"
+
+#: lib/util/kformatprivate.cpp:537
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "პარასკევი"
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "შაბათი"
+
+#: lib/util/kformatprivate.cpp:541
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "კვირა"
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "შემდეგი თვე"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "სამშაბათი"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "ოთხშაბათი"
+
+#: lib/util/kformatprivate.cpp:552
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "ხუთშაბათი"
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "პარასკევი"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "შაბათი"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "კვირა"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# translation of kdelibs4.po to Karakh
+#
+# Sairan Kikkarin <sairan@computer.org>, 2005, 2006, 2007, 2008, 2009.
+# Sairan Kikkarin <sairan@computer.org>, 2010, 2011, 2012.
+# Sairan Kikkarin <sairan(at)computer.org>, 2010, 2013.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2013-11-08 01:24+0600\n"
+"Last-Translator: Sairan Kikkarin <sairan@computer.org>\n"
+"Language-Team: Kazakh <kde-i18n-doc@kde.org>\n"
+"Language: kk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.2\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Бұл бағдарламаның лицензиялық шарттары келтірілмеген.\n"
+"Лицензиялық шарттарын бағдарламаның құжаттамасынан\n"
+"не бастапқы мәтінінен қараңыз.\n"
+
+#: lib/kaboutdata.cpp:306
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Бағдарламаны тарату шарттары: %1."
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU GPL лицензиясының 2-нұсқасы"
+
+#: lib/kaboutdata.cpp:356
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser GPL лицензиясының 2-нұсқасы"
+
+#: lib/kaboutdata.cpp:360
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD лицензиясы"
+
+#: lib/kaboutdata.cpp:361
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD лицензиясы"
+
+#: lib/kaboutdata.cpp:364
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Көркемдік лицензия"
+
+#: lib/kaboutdata.cpp:365
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Көркемдік лицензия"
+
+#: lib/kaboutdata.cpp:368
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public License"
+
+#: lib/kaboutdata.cpp:372
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU GPL лицензиясының 3-нұсқасы"
+
+#: lib/kaboutdata.cpp:376
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser GPL лицензиясының 3-нұсқасы"
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:381
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser GPL лицензиясының 2-нұсқасы"
+
+#: lib/kaboutdata.cpp:385
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Басқа"
+
+#: lib/kaboutdata.cpp:388
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Келтірілмеген"
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>Дүниежүзіндегі аударушылар тобтарының арқасында KDE көп тілдерге "
+"аударылған.</p><p>KDE жергілікті тілдерге аудару туралы <a href=\"http://"
+"l10n.kde.org\">http://l10n.kde.org</a> деген сайтты қараңыз.</p>"
+
+#: lib/kaboutdata.cpp:1165
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Автор туралы мәліметті көрсету"
+
+#: lib/kaboutdata.cpp:1166
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Лицензия мәліметін көрсету"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1178
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Бұл қолданбаны жазған адам беймәлім қалуын қалаған."
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 дегеннің автор(лар)ы\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Қателер туралы http://bugs.kde.org дегенге хабарлаңыз.\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Кате туралы хабарламаны %1 дегенге жіберіңіз.\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "%1 жиынында KDE 4 үйлесімді фабрикасы жоқ."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "pm"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgctxt "Coptic month 4 - ShortName"
+#| msgid "Kia"
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Кия"
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "AM"
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "Ethiopian month 8 - ShortName"
+#| msgid "Miy"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Мия"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Тир"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "Coptic weekday 4 - ShortDayName"
+#| msgid "Pti"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Пти"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Өңдеу"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Жіберу"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 Б"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 кБ"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 МБ"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 ГБ"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 ТБ"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 ПБ"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 ЕБ"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ЗБ"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 ЙБ"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 Б"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, fuzzy, qt-format
+#| msgctxt "memory size in 1024 bytes"
+#| msgid "%1 KB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 КБ"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 МБ"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 ГБ"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 ТБ"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 ПБ"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 ЕБ"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ЗБ"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 ЙБ"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 Б"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, fuzzy, qt-format
+#| msgctxt "size in 1024 bytes"
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 КиБ"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, fuzzy, qt-format
+#| msgctxt "size in 2^20 bytes"
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 МиБ"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, fuzzy, qt-format
+#| msgctxt "size in 2^30 bytes"
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 ГиБ"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 ТиБ"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, fuzzy, qt-format
+#| msgctxt "size in 2^50 bytes"
+#| msgid "%1 PiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 ПиБ"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, fuzzy, qt-format
+#| msgctxt "size in 2^60 bytes"
+#| msgid "%1 EiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 ЕиБ"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, fuzzy, qt-format
+#| msgctxt "size in 2^70 bytes"
+#| msgid "%1 ZiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ЗиБ"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, fuzzy, qt-format
+#| msgctxt "size in 2^80 bytes"
+#| msgid "%1 YiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 ЙиБ"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 күн"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 сағат"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 минут"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 секунд"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 милисекунд"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 күн"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 сағат"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 минут"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 секунд"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 %2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+#| msgid "Invalid item."
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Жарамсыз нәрсе."
+
+#: lib/util/kformatprivate.cpp:519
+#, fuzzy
+#| msgctxt "@option tomorrow"
+#| msgid "Tomorrow"
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Ертең"
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Бүгін"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Кеше"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+#| msgctxt "@option last month"
+#| msgid "Last Month"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Өткен ай"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "Сейсенбі"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Сәрсенбі"
+
+#: lib/util/kformatprivate.cpp:535
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "Бейсенбі"
+
+#: lib/util/kformatprivate.cpp:537
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "Жұма"
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "Сенбі"
+
+#: lib/util/kformatprivate.cpp:541
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "Жексенбі"
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+#| msgctxt "@option next month"
+#| msgid "Next Month"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Келесі ай"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Сейсенбі"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Сәрсенбі"
+
+#: lib/util/kformatprivate.cpp:552
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "Бейсенбі"
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Жұма"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Сенбі"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Жексенбі"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, fuzzy, qt-format
+#| msgctxt "City, Country"
+#| msgid "%1, %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# translation of kdelibs4.po to Khmer
+# Khoem Sokhem <khoemsokhem@khmeros.info>, 2008, 2009, 2010, 2011, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2012-06-27 10:04+0700\n"
+"Last-Translator: Khoem Sokhem <khoemsokhem@khmeros.info>\n"
+"Language-Team: Khmer\n"
+"Language: km\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: KBabel 1.11.4\n"
+"X-Language: km-KH\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"កម្មវិធីនេះមិនមានបញ្ជាក់លក្ខខណ្ឌអាជ្ញាបណ្ណឡើយ ។\n"
+"សូមស្វែងរកលក្ខខណ្ឌអាជ្ញាបណ្ណ ដោយពិនិត្យមើលឯកសារ ឬកូដ ។\n"
+
+#: lib/kaboutdata.cpp:306
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "កម្មវិធីនេះត្រូវបានចែកចាយក្រោមលក្ខខណ្ឌរបស់ %1 ។"
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "អាជ្ញាបណ្ណសាធារណៈទូទៅ GNU កំណែ ២"
+
+#: lib/kaboutdata.cpp:356
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "អាជ្ញាបណ្ណ GNU Lesser General Public License កំណែ ២"
+
+#: lib/kaboutdata.cpp:360
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "អាជ្ញាប័ណ្ណ BSD"
+
+#: lib/kaboutdata.cpp:361
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "អាជ្ញាប័ណ្ណ BSD"
+
+#: lib/kaboutdata.cpp:364
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "អាជ្ញាបណ្ណសិល្បៈ"
+
+#: lib/kaboutdata.cpp:365
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "អាជ្ញាបណ្ណសិល្បៈ"
+
+#: lib/kaboutdata.cpp:368
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "អាជ្ញាបណ្ណសាធារណៈ Q"
+
+#: lib/kaboutdata.cpp:372
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "អាជ្ញាបណ្ណ GNU General Public License កំណែ ៣"
+
+#: lib/kaboutdata.cpp:376
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "អាជ្ញាបណ្ណ GNU Lesser General Public License កំណែ ៣"
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:381
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "អាជ្ញាបណ្ណ GNU Lesser General Public License កំណែ ២"
+
+#: lib/kaboutdata.cpp:385
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "ផ្ទាល់ខ្លួន"
+
+#: lib/kaboutdata.cpp:388
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "មិនបានបញ្ជាក់"
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE ត្រូវបានបកប្រែជាភាសាខ្មែរ ដោយគម្រោងផ្ដួចផ្ដើមកម្មវិធីកុំព្យូទ័រភាសាខ្មែរ ។</p><p>ចំពោះ"
+"ព័ត៌មានបន្ថែមអំពីគម្រោង សូមទស្សនា <a href=\"http://www.khmeros.info\">www.khmeros."
+"info</a></p>"
+
+#: lib/kaboutdata.cpp:1165
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "បង្ហាញព័ត៌មានរបស់អ្នកនិពន្ធ"
+
+#: lib/kaboutdata.cpp:1166
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "បង្ហាញព័ត៌មានអាជ្ញាបណ្ណ"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1178
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "កម្មវិធីនេះត្រូវបានសរសេរដោយអ្នកដែលមិនចង់នៅជាអនាមិក ។"
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 ត្រូវបានសរសេរដោយ\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "សូមប្រើ http://bugs.kde.org ដើម្បីរាយការណ៍កំហុស ។\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "សូមរាយការណ៍កំហុសទៅ %1 ។\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "បណ្ណាល័យ %1 មិនផ្ដល់រោងចក្រឆបគ្នានឹង KDE 4 ទេ ។"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "ព្រឹក"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "ល្ងាច"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "ព្រឹក"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "ព្រឹក"
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "@action"
+#| msgid "Mail"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "សំបុត្រ"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "@item Text character set"
+#| msgid "Thai"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "ថៃ"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "ល្ងាច"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "ល្ងាច"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "កែសម្រួល"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "ដាក់ស្នើ"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "ព្រឹក"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 បៃ"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 គីឡូបៃ"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 មេកាបៃ"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 ជីកាបៃ"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 តេរ៉ាបៃ"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 បៃ"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, fuzzy, qt-format
+#| msgctxt "memory size in 1024 bytes"
+#| msgid "%1 KB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 គីឡូបៃ"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 មេកាបៃ"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 ជីកាបៃ"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 តេរ៉ាបៃ"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 បៃ"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, fuzzy, qt-format
+#| msgctxt "size in 1024 bytes"
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 គីឡូបៃ"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, fuzzy, qt-format
+#| msgctxt "size in 2^20 bytes"
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 មេកាបៃ"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, fuzzy, qt-format
+#| msgctxt "size in 2^30 bytes"
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 ជីកាបៃ"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 តេរ៉ាបៃ"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, fuzzy, qt-format
+#| msgctxt "size in 2^50 bytes"
+#| msgid "%1 PiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, fuzzy, qt-format
+#| msgctxt "size in 2^60 bytes"
+#| msgid "%1 EiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, fuzzy, qt-format
+#| msgctxt "size in 2^70 bytes"
+#| msgid "%1 ZiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, fuzzy, qt-format
+#| msgctxt "size in 2^80 bytes"
+#| msgid "%1 YiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 ថ្ងៃ"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 ម៉ោង"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 នាទី"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 វិនាទី"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 មិល្លីវិនាទី"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 ថ្ងៃ"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 ម៉ោង"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 នាទី"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 វិនាទី"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 និង %2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+#| msgid "Invalid item."
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "ធាតុមិនត្រឹមត្រូវ ។"
+
+#: lib/util/kformatprivate.cpp:519
+#, fuzzy
+#| msgctxt "@option tomorrow"
+#| msgid "Tomorrow"
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "ថ្ងៃស្អែក"
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "ថ្ងៃនេះ"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "ម្សិលមិញ"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+#| msgctxt "@option last month"
+#| msgid "Last Month"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "ខែមុន"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+#| msgctxt "@option last year"
+#| msgid "Last Year"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "ឆ្នាំមុន"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+#| msgctxt ""
+#| "referring to a filter on the modification and usage date of files/"
+#| "resources"
+#| msgid "Last Week"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "សប្ដាហ៍មុន"
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+#| msgctxt "@option last year"
+#| msgid "Last Year"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "ឆ្នាំមុន"
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+#| msgctxt "@option next month"
+#| msgid "Next Month"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "ខែក្រោយ"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "ឆ្នាំក្រោយ"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+#| msgctxt "@option next week"
+#| msgid "Next Week"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "សប្ដាហ៍ក្រោយ"
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "ឆ្នាំក្រោយ"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "ឆ្នាំក្រោយ"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "ឆ្នាំក្រោយ"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, fuzzy, qt-format
+#| msgctxt "City, Country"
+#| msgid "%1, %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# translation of kdelibs4.po to Kannada
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Umesh Rudrapatna <urudrapatna@yahoo.com>, 2007.
+# Umesh Rudrapatna <umeshrs@gmail.com>, 2007, 2008, 2009.
+# Shankar Prasad <svenkate@redhat.com>, 2008, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2010-06-24 18:32+0530\n"
+"Last-Translator: Shankar Prasad <svenkate@redhat.com>\n"
+"Language-Team: kn_IN <kde-i18n-doc@kde.org>\n"
+"Language: kn\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Lokalize 1.0\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"ಈ ಕ್ರಮವಿಧಿಗೆ (programme) ಯಾವುದೇ ಪರವಾನಗಿ ವಿವರಣೆಗಳನ್ನು ನಿಗದಿಗೊಳಿಸಿಲ್ಲ.\n"
+"ಪರವಾನಗಿ ವಿವರಗಳಿಗಾಗಿ ದಯವಿಟ್ಟು ದಸ್ತಾವೇಜುಗಳನ್ನೋ \n"
+" ಅಥವಾ ಆಕರವನ್ನೋ (source) ಪರಿಶೀಲಿಸಿ.\n"
+
+#: lib/kaboutdata.cpp:306
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "ಈ ಕ್ರಮವಿಧಿಯು '%1' ನ ಕರಾರುಗಳ ಅಡಿಯಲ್ಲಿ ವಿತರಿಸಲಾಗಿದೆ."
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "ಜಿಪಿಎಲ್ ವಿ೨"
+
+#: lib/kaboutdata.cpp:353
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License ಆವೃತ್ತಿ ೨"
+
+#: lib/kaboutdata.cpp:356
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "ಎಲ್ಜಿಪಿಎಲ್ ವಿ೨"
+
+#: lib/kaboutdata.cpp:357
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License ಆವೃತ್ತಿ ೨"
+
+#: lib/kaboutdata.cpp:360
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD ಪರವಾನಗಿ"
+
+#: lib/kaboutdata.cpp:361
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD ಪರವಾನಗಿ"
+
+#: lib/kaboutdata.cpp:364
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "ಕಲಾತ್ಮಕ ಪರವಾನಗಿ"
+
+#: lib/kaboutdata.cpp:365
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "ಕಲಾತ್ಮಕ ಪರವಾನಗಿ"
+
+#: lib/kaboutdata.cpp:368
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "ಕ್ಯುಪಿಎಲ್ ವಿ೧.೦"
+
+#: lib/kaboutdata.cpp:369
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public License"
+
+#: lib/kaboutdata.cpp:372
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "ಜಿಪಿಎಲ್ ವಿ೩"
+
+#: lib/kaboutdata.cpp:373
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License ಆವೃತ್ತಿ ೩"
+
+#: lib/kaboutdata.cpp:376
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "ಎಲ್ಜಿಪಿಎಲ್ ವಿ೩"
+
+#: lib/kaboutdata.cpp:377
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License ಆವೃತ್ತಿ ೩"
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "ಎಲ್ಜಿಪಿಎಲ್ ವಿ೨"
+
+#: lib/kaboutdata.cpp:381
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License ಆವೃತ್ತಿ ೨"
+
+#: lib/kaboutdata.cpp:385
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "ಇಚ್ಛೆಯ (ಕಸ್ಟಮ್)"
+
+#: lib/kaboutdata.cpp:388
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "ಸೂಚಿಸಲಾಗಿಲ್ಲ"
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>ವಿಶ್ವಾದ್ಯಂತ ಹಲವಾರು ತಂಡಗಳ ಶ್ರಮದ ಫಲವಾಗಿ KDE ಅನೇಕ ಭಾಷೆಗಳಿಗೆ ಭಾಷಾಂತರಗೊಂಡಿದೆ</"
+"p><p> KDE ಅಂತಾರ್ರಾಷ್ಟ್ರೀಕರಣದ ಬಗೆಗೆ ಹೆಚ್ಚಿನ ಮಾಹಿತಿಗಾಗಿ <a href=\"http://l10n.kde."
+"org\">http://l10n.kde.org</a> ಗೆ ಭೇಟಿ ನೀಡಿ</p>"
+
+#: lib/kaboutdata.cpp:1165
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "ಕರ್ತೃ ಮಾಹಿತಿ ತೋರಿಸು"
+
+#: lib/kaboutdata.cpp:1166
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "ಪರವಾನಗಿ ಮಾಹಿತಿ ತೋರಿಸು"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1178
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "ಈ ಅನ್ವಯವು ಅನಾಮಧೇಯರಾಗಿ ಉಳಿಯಬೇಕೆಂದಿರುವ ಒಬ್ಭರಿಂದ ಬರೆಯಲ್ಲಟ್ಟಿತು."
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 \n"
+"%2 ನಿಂದ ಬರೆಯಲ್ಪಟ್ಚಿತು"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "ದಯವಿಟ್ಟು ದೋಶಗಳನ್ನು ವರದಿ ಮಾಡಲು http://bugs.kde.org ಬಳಸಿ.\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "ದಯವಿಟ್ಟು %1 ಗೆ ದೋಶಗಳನ್ನು ವರದಿಮಾಡಿ.\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "%1 ಭಂಡಾರವು (library) KDE ೪ ಸಹವರ್ತಿ ಕಾರ್ಯಾಗಾರವನ್ನು (factory) ನೀಡುವುದಿಲ್ಲ."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "ಪೂರ್ವಾಹ್ನ"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "ಅಪರಾಹ್ನ"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "ಪೂರ್ವಾಹ್ನ"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "ಖ"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "ಮೇ"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "ತೀರ್"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "ಸಂಪಾದಿಸು"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "ಒಪ್ಪಿಸು"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "ಪೂರ್ವಾಹ್ನ"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 ಎಮ್ಬಿ"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 ಜಿಬಿ"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 ಟೆಬಿ"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 ಪೆಬಿ"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 ಇಬಿ"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ಝಿಬಿ"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 ವೈಬಿ"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, fuzzy, qt-format
+#| msgctxt "memory size in 1024 bytes"
+#| msgid "%1 KB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 ಕಿಬಿ"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 ಎಮ್ಬಿ"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 ಜಿಬಿ"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 ಟೆಬಿ"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 ಪೆಬಿ"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 ಇಬಿ"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ಝಿಬಿ"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 ವೈಬಿ"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, fuzzy, qt-format
+#| msgctxt "size in 1024 bytes"
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, fuzzy, qt-format
+#| msgctxt "size in 2^20 bytes"
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, fuzzy, qt-format
+#| msgctxt "size in 2^30 bytes"
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, fuzzy, qt-format
+#| msgctxt "size in 2^50 bytes"
+#| msgid "%1 PiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, fuzzy, qt-format
+#| msgctxt "size in 2^60 bytes"
+#| msgid "%1 EiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, fuzzy, qt-format
+#| msgctxt "size in 2^70 bytes"
+#| msgid "%1 ZiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, fuzzy, qt-format
+#| msgctxt "size in 2^80 bytes"
+#| msgid "%1 YiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 ದಿನಗಳು"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 ಘಂಟೆಗಳು"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 ನಿಮಿಷಗಳು"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 ಕ್ಷಣಗಳು"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 ಸಹಸ್ರಾಂಶಕ್ಷಣು ಮಿಲಿಸೆಕೆಂಡ್s)"
+msgstr[1] "%1 ಸಹಸ್ರಾಂಶಕ್ಷಣು ಮಿಲಿಸೆಕೆಂಡ್s)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 ದಿನಗಳು"
+msgstr[1] "%1 ದಿನಗಳು"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 ಘಂಟೆಗಳು"
+msgstr[1] "%1 ಘಂಟೆಗಳು"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 ನಿಮಿಷಗಳು"
+msgstr[1] "%1 ನಿಮಿಷಗಳು"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 ಕ್ಷಣಗಳು"
+msgstr[1] "%1 ಕ್ಷಣಗಳು"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 ಹಾಗು %2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+#| msgid "Invalid item."
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "ಅಮಾನ್ಯವಾದ ಅಂಶ."
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "ಈ ದಿನ"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "ನಿನ್ನೆ"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "ಮುಂದಿನ ತಿಂಗಳು"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "ಮಂಗಳವಾರ"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "ಬುಧವಾರ"
+
+#: lib/util/kformatprivate.cpp:535
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "ಗುರುವಾರ"
+
+#: lib/util/kformatprivate.cpp:537
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "ಶುಕ್ರವಾರ"
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "ಶನಿವಾರ"
+
+#: lib/util/kformatprivate.cpp:541
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "ಭಾನುವಾರ"
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "ಮುಂದಿನ ತಿಂಗಳು"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "ಮಂಗಳವಾರ"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "ಬುಧವಾರ"
+
+#: lib/util/kformatprivate.cpp:552
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "ಗುರುವಾರ"
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "ಶುಕ್ರವಾರ"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "ಶನಿವಾರ"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "ಭಾನುವಾರ"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "%1 is 'the slot asked for foo arguments', %2 is 'but there are only bar "
+#| "available'"
+#| msgid "%1, %2."
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2."
--- /dev/null
+# Korean messages for kdelibs.
+# Copyright (C) Free Software Foundation, Inc.
+# Cho Sung Jae <cho.sungjae@gmail.com>, 2007.
+# Shinjo Park <kde@peremen.name>, 2007, 2008, 2009, 2010, 2011.
+# Shinjo Park <kde@peremen.name>, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2018-08-14 23:01+0100\n"
+"Last-Translator: Shinjo Park <kde@peremen.name>\n"
+"Language-Team: Korean <kde-i18n-doc@kde.org>\n"
+"Language: ko\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Lokalize 2.0\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"이 프로그램의 라이선스 조항이 지정되지 않았습니다.\n"
+"문서나 소스 코드에서 라이선스 조항을 찾아 보십시오.\n"
+
+#: lib/kaboutdata.cpp:306
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "이 프로그램은 %1의 조건 하에 배포됩니다."
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU 일반 공중 라이선스 버전 2"
+
+#: lib/kaboutdata.cpp:356
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU 일반 공중 라이선스 버전 2"
+
+#: lib/kaboutdata.cpp:360
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD 라이선스"
+
+#: lib/kaboutdata.cpp:361
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD 라이선스"
+
+#: lib/kaboutdata.cpp:364
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "아티스틱 라이선스"
+
+#: lib/kaboutdata.cpp:365
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "아티스틱 라이선스"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q 공중 라이선스"
+
+#: lib/kaboutdata.cpp:372
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU 일반 공중 라이선스 버전 3"
+
+#: lib/kaboutdata.cpp:376
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU 일반 약소 공중 라이선스 버전 3"
+
+#: lib/kaboutdata.cpp:380
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:381
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU 일반 약소 공중 라이선스 버전 2.1"
+
+#: lib/kaboutdata.cpp:385
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "사용자 정의"
+
+#: lib/kaboutdata.cpp:388
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "지정하지 않음"
+
+#: lib/kaboutdata.cpp:937
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE는 전세계 번역 팀의 고마운 작업으로 많은 언어로 번역됩니다.</p><p>KDE "
+"국제화에 대한 더 많은 정보를 찾고 싶으시면 <a href=\"https://l10n.kde.org"
+"\">https://l10n.kde.org</a>를 방문해 주십시오.</p><p>한국 KDE 국제화에 관한 "
+"자세한 정보는 <a href=\"http://www.kde.or.kr\">http://www.kde.or.kr</a>(한국 "
+"KDE 사용자 모임)을 방문해 주십시오.</p>"
+
+#: lib/kaboutdata.cpp:1165
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "작성자 정보를 표시합니다."
+
+#: lib/kaboutdata.cpp:1166
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "라이선스 정보를 표시합니다."
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "이 프로그램의 desktop 항목의 기본 파일 이름입니다."
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "파일 이름"
+
+#: lib/kaboutdata.cpp:1178
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "이 프로그램은 익명으로 남기 위한 사람이 작성했습니다."
+
+#: lib/kaboutdata.cpp:1180
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 프로그램의 작성자:"
+
+#: lib/kaboutdata.cpp:1191
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "https://bugs.kde.org 에 버그를 보고해 주십시오."
+
+#: lib/kaboutdata.cpp:1193
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "%1(으)로 버그를 보고해 주십시오."
+
+#: lib/plugin/kpluginloader.cpp:122
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "%1 라이브러리에서 KPluginFactory를 제공하지 않습니다."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1분 %2.%3초"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1분 %2초"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1시간 %2분"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1시간 %2분 %3.%4초"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1시간 %2분 %3초"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1일"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1시간"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1분"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1초"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n밀리초"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n일"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n시간"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n분"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n초"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 %2"
+
+#: lib/util/kformatprivate.cpp:509
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "잘못된 날짜"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "내일"
+
+#: lib/util/kformatprivate.cpp:521
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "오늘"
+
+#: lib/util/kformatprivate.cpp:523
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "어제"
+
+#: lib/util/kformatprivate.cpp:529
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "지난 월요일"
+
+#: lib/util/kformatprivate.cpp:531
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "지난 화요일"
+
+#: lib/util/kformatprivate.cpp:533
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "지난 수요일"
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "지난 목요일"
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "지난 금요일"
+
+#: lib/util/kformatprivate.cpp:539
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "지난 토요일"
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "지난 일요일"
+
+#: lib/util/kformatprivate.cpp:546
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "다음 월요일"
+
+#: lib/util/kformatprivate.cpp:548
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "다음 화요일"
+
+#: lib/util/kformatprivate.cpp:550
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "다음 수요일"
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "다음 목요일"
+
+#: lib/util/kformatprivate.cpp:554
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "다음 금요일"
+
+#: lib/util/kformatprivate.cpp:556
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "다음 토요일"
+
+#: lib/util/kformatprivate.cpp:558
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "다음 일요일"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%2, %1"
--- /dev/null
+# translation of kdelibs4.po to Kurdish
+# Kurdish translation for kdelibs
+# Copyright (c) (c) 2006 Canonical Ltd, and Rosetta Contributors 2006
+# This file is distributed under the same license as the kdelibs package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2006.
+# Erdal Ronahi <erdal.ronahi@nospam.gmail.com>, 2006, 2008.
+# Erdal Ronahi <erdal.ronahi@nospam.gmail.com>, 2007, 2008, 2009.
+# Amed Çeko Jiyan <amedcj@gmail.com>, 2008.
+# Erdal Ronahî <erdal.ronahi@nospam.gmail.com>, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2010-08-13 15:45+0200\n"
+"Last-Translator: Erdal Ronahî <erdal.ronahi@nospam.gmail.com>\n"
+"Language-Team: Kurdish Team http://pckurd.net\n"
+"Language: ku\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Virtaal 0.6.1\n"
+"X-Launchpad-Export-Date: 2007-11-26 09:44+0000\n"
+"X-Poedit-Language: Kurdish\n"
+"X-Poedit-Country: Kurdistan\n"
+"X-Poedit-SourceCharset: utf-8\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Bendên peymana vê bernameyê ne destnûşankirî ne.\n"
+"Ji kerema xwe re li belgeyên pergalê vegere an jî \n"
+"li şîfreya bingehê ji bo agahiyên li ser peymanê.\n"
+
+#: lib/kaboutdata.cpp:306
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Ev bername di bin banê lîsansa %1 tê belavkirin."
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "Lîsansa Raya Giştî a GNU, Guherto 2"
+
+#: lib/kaboutdata.cpp:356
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "Lîsansa Gelempera Giştî ya Biçûktir a GNU, Guhertoya 2"
+
+#: lib/kaboutdata.cpp:360
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Lîsansa BSD"
+
+#: lib/kaboutdata.cpp:361
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Lîsansa BSD"
+
+#: lib/kaboutdata.cpp:364
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Lîsansa Hunerî"
+
+#: lib/kaboutdata.cpp:365
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Lîsansa Hunerî"
+
+#: lib/kaboutdata.cpp:368
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Lîsansa Gelempera Q"
+
+#: lib/kaboutdata.cpp:372
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "Lîsansa Gelempera Giştî ya GNU, Guhertoya 2"
+
+#: lib/kaboutdata.cpp:376
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "Lîsansa Gelempera Giştî ya Biçûktir a GNU, Guhertoya 3"
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:381
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "Lîsansa Gelempera Giştî ya Biçûktir a GNU, Guhertoya 2"
+
+#: lib/kaboutdata.cpp:385
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Taybet"
+
+#: lib/kaboutdata.cpp:388
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Nehatiye diyarkirin"
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>Wergerandina KDE'yê ji hêla Koma PCKurdê ve hatiye kirin. Malpera Koma "
+"PCKurdê: <a href=\"http:www.pckurd.net\">http://www.pckurd.net</a></p>"
+
+#: lib/kaboutdata.cpp:1165
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Agahiya nivîskêr nîşan bide"
+
+#: lib/kaboutdata.cpp:1166
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Agahiya lîsansê nîşan bide"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1178
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr ""
+"Ev sepan ji aliyê kesekî/e ku naxwaze navê wî/ê deşîfre bibe hatiye "
+"nivîsandin."
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 ji hêla\n"
+"%2 ve hatiye nivîsandin"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr ""
+"Ji kerema xwe bo ragihandina çewtiyan navnîşana http://bugs.kde.org bikar "
+"bîne.\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Ji kerema xwe re çewtiyan ragihîne navnîşana %1\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Pirtûkxaneya %1 hilberînereke ahengî KDE 4ê nahundirîne."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "bn"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "pn"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "bn"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgctxt "Coptic month 4 - ShortName"
+#| msgid "Kia"
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Kha"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "Ethiopian month 8 - ShortName"
+#| msgid "Miy"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Gul"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tir"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Sererastkirin"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Şandin"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "bn"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, fuzzy, qt-format
+#| msgctxt "memory size in 1024 bytes"
+#| msgid "%1 KB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, fuzzy, qt-format
+#| msgctxt "size in 1024 bytes"
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, fuzzy, qt-format
+#| msgctxt "size in 2^20 bytes"
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, fuzzy, qt-format
+#| msgctxt "size in 2^30 bytes"
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, fuzzy, qt-format
+#| msgctxt "size in 2^50 bytes"
+#| msgid "%1 PiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, fuzzy, qt-format
+#| msgctxt "size in 2^60 bytes"
+#| msgid "%1 EiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, fuzzy, qt-format
+#| msgctxt "size in 2^70 bytes"
+#| msgid "%1 ZiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, fuzzy, qt-format
+#| msgctxt "size in 2^80 bytes"
+#| msgid "%1 YiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 roj"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 demjimêr"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 xulek"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 çirke"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 mîlîçirke"
+msgstr[1] "%1 mîlîçirke"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 roj"
+msgstr[1] "%1 roj"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 demjimêr"
+msgstr[1] "%1 demjimêr"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 xulek"
+msgstr[1] "%1 xulek"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 çirke"
+msgstr[1] "%1 çirke"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 û %2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+#| msgid "Invalid item."
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Hêmana nederbasdar."
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Îro"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Do"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Meha pişt re"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "Sêşem"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Çarşem"
+
+#: lib/util/kformatprivate.cpp:535
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "Pêncşem"
+
+#: lib/util/kformatprivate.cpp:537
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "În"
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "Şemî"
+
+#: lib/util/kformatprivate.cpp:541
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "Yekşem"
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Meha pişt re"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Sêşem"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Çarşem"
+
+#: lib/util/kformatprivate.cpp:552
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "Pêncşem"
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "În"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Şemî"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Yekşem"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "%1 is 'the slot asked for foo arguments', %2 is 'but there are only bar "
+#| "available'"
+#| msgid "%1, %2."
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2."
--- /dev/null
+# translation of kdelibs4.po to Luxembourgish
+# kevin claude everard <kevin@math.uni-sb.de>, 2005.
+# Michel Ludwig <michel.ludwig@kdemail.net>, 2005, 2006.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2006-06-22 16:29+0200\n"
+"Last-Translator: Michel Ludwig <michel.ludwig@kdemail.net>\n"
+"Language-Team: Luxembourgish <kde-i18n-lb@kde.org>\n"
+"Language: lb\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.2\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Fir dëse Programm ass keng Lizenz ugin.\n"
+"Kuckt w.e.g. an der Dokumentatioun oder am\n"
+"Quellcode no de Lizenzbedingungen\n"
+
+#: lib/kaboutdata.cpp:306
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Dëse Programm ass ënnert de Bedingunge vun %1 veröffentlëcht ginn."
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgid "GPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:356
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:360
+#, fuzzy
+#| msgid "License:"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Lizenz:"
+
+#: lib/kaboutdata.cpp:361
+#, fuzzy
+#| msgid "License:"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Lizenz:"
+
+#: lib/kaboutdata.cpp:364
+#, fuzzy
+#| msgid "Public Key"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Öffentleche Schlëssel"
+
+#: lib/kaboutdata.cpp:365
+#, fuzzy
+#| msgid "Public Key"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Öffentleche Schlëssel"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr ""
+
+#: lib/kaboutdata.cpp:369
+#, fuzzy
+#| msgid "Public Key"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Öffentleche Schlëssel"
+
+#: lib/kaboutdata.cpp:372
+#, fuzzy
+#| msgid "GPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:376
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:381
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr ""
+
+#: lib/kaboutdata.cpp:385
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "&Benotzerdéfinéiert"
+
+#: lib/kaboutdata.cpp:388
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Kee Provider gewielt."
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE gëtt a vill verschidde Sproochen iwwersat. Ën décke Merci dowéinst un "
+"all Iwwersetzungsteam op der Welt.</p><p>Méi Informatioune fannt dir "
+"nnerth<a href=\"ëttp://l10n.kde.org\">http://l10n.kde.org</a>.</p> <p>Wann "
+"dir méi iwwert déi lëtzebuergesch Iwwersetzung wësse wëllt, da kuckt w.e.g. "
+"op <a href=\"http://lb.l10n.kde.org\">http://lb.l10n.kde.org</a>.</p>"
+
+#: lib/kaboutdata.cpp:1165
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Informatiounen iwwert den Auteur uweisen"
+
+#: lib/kaboutdata.cpp:1166
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Lizenzinformatiounen uweisen"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+#, fuzzy
+#| msgid "Vietnamese"
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "Vietnamesësch"
+
+#: lib/kaboutdata.cpp:1178
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Den Auteur vun dësem Programm wëllt anonym bleiwen."
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 ass vum\n"
+"%2 geschriwwe ginn"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Mellt eventuell Käfere w.e.g. ënnert http://bugs.kde.org.\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Mellt eventuell Käfere w.e.g. bei %1.\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer an %2 function."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "D'Bibliothéik %1 huet keng %2-Funktioun."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "moies"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "nomëttes/owës"
+
+#: lib/util/kformatprivate.cpp:121
+#, fuzzy
+#| msgid "On"
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "Un"
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "moies"
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Ok"
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "An der Rei"
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Kha"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Änneren"
+
+#: lib/util/kformatprivate.cpp:127
+#, fuzzy
+#| msgid "G:"
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G:"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tir"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Veränneren"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+#, fuzzy
+#| msgctxt "QFont"
+#| msgid "Yi"
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:132
+#, fuzzy
+#| msgctxt "QFont"
+#| msgid "Yi"
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Verschécken"
+
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy
+#| msgid "B:"
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B:"
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "moies"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 %2"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, fuzzy, qt-format
+#| msgid "Monday"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "Méinden"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 Optiounen"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 Optiounen"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 Optiounen"
+msgstr[1] "%1 Optiounen"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgid "Monday"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "Méinden"
+msgstr[1] "Méinden"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] ""
+msgstr[1] ""
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 Optiounen"
+msgstr[1] "%1 Optiounen"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 Optiounen"
+msgstr[1] "%1 Optiounen"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 %2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Ongülteg Werter"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+#| msgid "Monday"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Méinden"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Dënschten"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Nächste Mount"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "Dënschten"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Mëttwoch"
+
+#: lib/util/kformatprivate.cpp:535
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "Donnëschten"
+
+#: lib/util/kformatprivate.cpp:537
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "Freiden"
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "Samschten"
+
+#: lib/util/kformatprivate.cpp:541
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "Sonnden"
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Nächste Mount"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Dënschten"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Mëttwoch"
+
+#: lib/util/kformatprivate.cpp:552
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "Donnëschten"
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Freiden"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Samschten"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Sonnden"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1 %2"
--- /dev/null
+# translation of kdelibs4.po to Lithuanian
+# Ričardas Čepas <rch@richard.eu.org>, 2002-2004.
+# Donatas Glodenis <dgvirtual@akl.lt>, 2004-2009.
+# Gintautas Miselis <gintautas@miselis.lt>, 2008.
+# Andrius Štikonas <andrius@stikonas.eu>, 2009.
+# Tomas Straupis <tomasstraupis@gmail.com>, 2011.
+# Remigijus Jarmalavičius <remigijus@jarmalavicius.lt>, 2011.
+# Liudas Ališauskas <liudas.alisauskas@gmail.com>, 2011, 2012, 2013, 2014.
+# Liudas Alisauskas <liudas@akmc.lt>, 2013, 2015.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2015-01-28 10:19+0200\n"
+"Last-Translator: Liudas Ališauskas <liudas@akmc.lt>\n"
+"Language-Team: Lithuanian <kde-i18n-lt@kde.org>\n"
+"Language: lt\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : n%10>=2 && (n%100<10 || n"
+"%100>=20) ? 1 : n%10==0 || (n%100>10 && n%100<20) ? 2 : 3);\n"
+"X-Generator: Lokalize 1.5\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Nėra nurodyta šios programos licencijavimo sąlygų.\n"
+"Pasitikrinkite šaltinio dokumentaciją dėl bet kokių\n"
+"licencijavimo sąlygų.\n"
+
+#: lib/kaboutdata.cpp:306
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Ši programa platinama sąlygomis, nurodytomis %1."
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU bendroji viešoji licencija, 2 versija"
+
+#: lib/kaboutdata.cpp:356
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU mažesnioji bendroji viešoji licencija, 2 versija"
+
+#: lib/kaboutdata.cpp:360
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD licencija"
+
+#: lib/kaboutdata.cpp:361
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD licencija"
+
+#: lib/kaboutdata.cpp:364
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Kūrybinė licencija"
+
+#: lib/kaboutdata.cpp:365
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Kūrybinė licencija"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q viešoji licencija"
+
+#: lib/kaboutdata.cpp:372
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU bendroji viešoji licencija, 3 versija"
+
+#: lib/kaboutdata.cpp:376
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU mažesnioji bendroji viešoji licencija, 3 versija"
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgctxt "KAboutLicense|@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:381
+#, fuzzy
+#| msgctxt "KAboutLicense|@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU mažesnioji bendroji viešoji licencija, 2 versija"
+
+#: lib/kaboutdata.cpp:385
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Savitas"
+
+#: lib/kaboutdata.cpp:388
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Nenurodyta"
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt ""
+#| "KAboutData|replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE yra verčiama į daugybę kalbų, įvairių vertimo komandų iš viso "
+"pasaulio dėka.</p><p>Norėdami apie KDE vertimą sužinoti daugiau, aplankykite "
+"KDE vertimui skirtą žiniatinklio svetainę <a href=\"http://l10n.kde.org"
+"\">http://l10n.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1165
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Rodyti informaciją apie autorių."
+
+#: lib/kaboutdata.cpp:1166
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Rodyti licencijos informaciją."
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "failo pavadinimas"
+
+#: lib/kaboutdata.cpp:1178
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Ši programa buvo parašyta nežinomu norinčio likti asmens."
+
+#: lib/kaboutdata.cpp:1180
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 autoriai:"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgctxt "KAboutData CLI|"
+#| msgid "Please use http://bugs.kde.org to report bugs."
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Prašome naudoti http://bugs.kde.org, kad pranešti apie klaidas."
+
+#: lib/kaboutdata.cpp:1193
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Prašome pranešti apie klaidas čia %1."
+
+#: lib/plugin/kpluginloader.cpp:122
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "%1 biblioteka nesiūlo KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr ""
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr ""
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2.%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1val.:%2min."
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1val.%2min.%3.%4s."
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1val.%2min.%3s."
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 dienų"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 valandų"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minučių"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 sekundžių"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n millisecond(s)"
+#| msgid_plural "%n millisecond(s)"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n milisek."
+msgstr[1] "%n milisek."
+msgstr[2] "%n milisek."
+msgstr[3] "%n milisek."
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n day(s)"
+#| msgid_plural "%n day(s)"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n d."
+msgstr[1] "%n d."
+msgstr[2] "%n d."
+msgstr[3] "%n d."
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n hour(s)"
+#| msgid_plural "%n hour(s)"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n val."
+msgstr[1] "%n val."
+msgstr[2] "%n val."
+msgstr[3] "%n val."
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n minute(s)"
+#| msgid_plural "%n minute(s)"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n min."
+msgstr[1] "%n min."
+msgstr[2] "%n min."
+msgstr[3] "%n min."
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n second(s)"
+#| msgid_plural "%n second(s)"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n sek."
+msgstr[1] "%n sek."
+msgstr[2] "%n sek."
+msgstr[3] "%n sek."
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 ir %2"
+
+#: lib/util/kformatprivate.cpp:509
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Rytoj"
+
+#: lib/util/kformatprivate.cpp:521
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Šiandien"
+
+#: lib/util/kformatprivate.cpp:523
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Vakar"
+
+#: lib/util/kformatprivate.cpp:529
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:531
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:533
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:539
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:546
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:548
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:550
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:554
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:556
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:558
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr ""
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# translation of kdelibs4.po to Latvian
+# kdelibs.po tulkojums uz Latviešu valodu
+# Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+#
+# Maris Nartiss <maris.nartiss@gmail.com>, 2005.
+# Maris Nartiss <maris.kde@gmail.com>, 2006, 2007, 2008, 2009, 2010, 2011.
+# Linux localization project <viesturs.zarins@mii.lu.lv>, 2007.
+# Viesturs Zarins <viesturs.zarins@mii.lu.lv>, 2007, 2008, 2010.
+# Viesturs Zariņš <viesturs.zarins@mii.lu.lv>, 2009.
+# Einars Sprugis <einars8@gmail.com>, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2011-07-06 12:57+0300\n"
+"Last-Translator: Maris Nartiss <maris.kde@gmail.com>\n"
+"Language-Team: Latvian\n"
+"Language: lv\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : "
+"2);\n"
+"X-Launchpad-Export-Date: 2007-11-22 17:44+0000\n"
+"X-Generator: KBabel 1.11.4\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Licenzēšanas noteikumi šai programmai nav uzrādīti.\n"
+"Lūdzu, pārbaudiet, vai dokumentācijā vai avotā nav norādīti\n"
+"licenzēšanas noteikumi.\n"
+
+#: lib/kaboutdata.cpp:306
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Šī programma tiek izplatīta saskaņā ar %1."
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License Version 2"
+
+#: lib/kaboutdata.cpp:356
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License versija 2"
+
+#: lib/kaboutdata.cpp:360
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD licence"
+
+#: lib/kaboutdata.cpp:361
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD licence"
+
+#: lib/kaboutdata.cpp:364
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artistic licence"
+
+#: lib/kaboutdata.cpp:365
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artistic licence"
+
+#: lib/kaboutdata.cpp:368
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public licence"
+
+#: lib/kaboutdata.cpp:372
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License versija 3"
+
+#: lib/kaboutdata.cpp:376
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License versija 3"
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:381
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License versija 2"
+
+#: lib/kaboutdata.cpp:385
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Pielāgota"
+
+#: lib/kaboutdata.cpp:388
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Nav norādīta"
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE ir pārtulkots daudzās valodās pateicoties tulkotāju komandu darbam no "
+"visas pasaules.</p><p>Papildu informācijai par KDE internacionalizāciju "
+"apmeklējiet <a href=\"http://l10n.kde.org\">http://l10n.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1165
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Parādīt autoru informāciju"
+
+#: lib/kaboutdata.cpp:1166
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Parādīt licences informāciju"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1178
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Programmas autors vēlas palikt anonīms."
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 uzrakstīja\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Lūdzu, izmantojiet http://bugs.kde.org, lai ziņotu par kļūdām.\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Lūdzu, ziņojiet par kļūdām %1.\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Bibliotēka %1 nepiedāvā ar KDE savietojamu ražotāju."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "pm"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "AM"
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "@action"
+#| msgid "Mail"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Sūtīt pa pastu"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "@item Text character set"
+#| msgid "Thai"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Taizemes"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Rediģēt"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Nosūtīt"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, fuzzy, qt-format
+#| msgctxt "memory size in 1024 bytes"
+#| msgid "%1 KB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, fuzzy, qt-format
+#| msgctxt "size in 1024 bytes"
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, fuzzy, qt-format
+#| msgctxt "size in 2^20 bytes"
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, fuzzy, qt-format
+#| msgctxt "size in 2^30 bytes"
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, fuzzy, qt-format
+#| msgctxt "size in 2^50 bytes"
+#| msgid "%1 PiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, fuzzy, qt-format
+#| msgctxt "size in 2^60 bytes"
+#| msgid "%1 EiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, fuzzy, qt-format
+#| msgctxt "size in 2^70 bytes"
+#| msgid "%1 ZiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, fuzzy, qt-format
+#| msgctxt "size in 2^80 bytes"
+#| msgid "%1 YiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 dienas"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 stundas"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minūtes"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 sekundes"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 milisekunde"
+msgstr[1] "%1 milisekunde"
+msgstr[2] "%1 milisekunde"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 dienas"
+msgstr[1] "%1 dienas"
+msgstr[2] "%1 dienas"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 stundas"
+msgstr[1] "%1 stundas"
+msgstr[2] "%1 stundas"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 minūtes"
+msgstr[1] "%1 minūtes"
+msgstr[2] "%1 minūtes"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 sekundes"
+msgstr[1] "%1 sekundes"
+msgstr[2] "%1 sekundes"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 un %2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+#| msgid "Invalid item."
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Nederīgs vienums."
+
+#: lib/util/kformatprivate.cpp:519
+#, fuzzy
+#| msgctxt "@option tomorrow"
+#| msgid "Tomorrow"
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Rīt"
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Šodien"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Vakar"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+#| msgctxt "@option last month"
+#| msgid "Last Month"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Pagājušajā mēnesī"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+#| msgctxt "@option last year"
+#| msgid "Last Year"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "Pagājušajā gadā"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+#| msgctxt ""
+#| "referring to a filter on the modification and usage date of files/"
+#| "resources"
+#| msgid "Last Week"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Pagājušajā nedēļā"
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+#| msgctxt "@option last year"
+#| msgid "Last Year"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "Pagājušajā gadā"
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+#| msgctxt "@option next month"
+#| msgid "Next Month"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Nākamais mēnesis"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Nākamais gads"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+#| msgctxt "@option next week"
+#| msgid "Next Week"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Nākamā nedēļa"
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Nākamais gads"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Nākamais gads"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Nākamais gads"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, fuzzy, qt-format
+#| msgctxt "City, Country"
+#| msgid "%1, %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# translation of kdelibs4.po to Hindi
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Sangeeta Kumari <sangeeta09@gmail.com>, 2008.
+# Rajesh Ranjan <rajesh672@gmail.com>, 2010.
+# Rajesh Ranjan <rranjan@redhat.com>, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2010-09-24 15:44+0530\n"
+"Last-Translator: Rajesh Ranjan <rranjan@redhat.com>\n"
+"Language-Team: Hindi <fedora-trans-hi@redhat.com>\n"
+"Language: hi\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"X-Generator: KBabel 1.11.4\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"ई प्रोग्राम क' लेल कोनो लाइसेंसिंग शर्तें उल्लेखित नहि छी.\n"
+"कृप्या लाइसेंसिंग शर्तों केर लेल\n"
+"दस्ताबेज अथवा स्रोत देखू.\n"
+
+#: lib/kaboutdata.cpp:306
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "ई प्रोग्राम %1 शर्तों केर अधीन वितरित कएल गेल अछि."
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "जीपीएल सं.२"
+
+#: lib/kaboutdata.cpp:353
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "जीएनयू जनरल पब्लिक लाइसेंस संस्करण २"
+
+#: lib/kaboutdata.cpp:356
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "एलजीपीएल सं.२"
+
+#: lib/kaboutdata.cpp:357
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "जीएनयू लेसर जनरल पब्लिक लाइसेंस संस्करण २"
+
+#: lib/kaboutdata.cpp:360
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "बीएसडी लाइसेंस"
+
+#: lib/kaboutdata.cpp:361
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "बीएसडी लाइसेंस"
+
+#: lib/kaboutdata.cpp:364
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "आर्टिस्टिक लाइसेंस"
+
+#: lib/kaboutdata.cpp:365
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "आर्टिस्टिक लाइसेंस"
+
+#: lib/kaboutdata.cpp:368
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "क्यूपीएल सं.1.0"
+
+#: lib/kaboutdata.cpp:369
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "क्यू पब्लिक लाइसेंस"
+
+#: lib/kaboutdata.cpp:372
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "जीपीएल सं.३"
+
+#: lib/kaboutdata.cpp:373
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "जीएनयू जनरल पब्लिक लाइसेंस संस्करण ३"
+
+#: lib/kaboutdata.cpp:376
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "एलजीपीएल सं.३"
+
+#: lib/kaboutdata.cpp:377
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "जीएनयू जनरल पब्लिक लाइसेंस संस्करण ३"
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "एलजीपीएल सं.२"
+
+#: lib/kaboutdata.cpp:381
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "जीएनयू लेसर जनरल पब्लिक लाइसेंस संस्करण २"
+
+#: lib/kaboutdata.cpp:385
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "पसंदीदा"
+
+#: lib/kaboutdata.cpp:388
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "निर्दिष्ट नहि"
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>केडीइ बहुते भाषासभ मे अनूदित अछि. एहि क' लेल विश्व भर केर अनुवादकसभक टोली केँ "
+"हार्दिक धन्यवाद.</p><p>केडीइ केर अंतर्राष्ट्रीयकरण केर संबंध मे आओर बेसी जानकारी क' लेल "
+"एतय जाउ: <a href=\"http://l10n.kde.org\">http://l10n.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1165
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "लेखक कए जानकारी देखाबू"
+
+#: lib/kaboutdata.cpp:1166
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "लाइसेंसक जानकारी देखाबू"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1178
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "ई अनुप्रयोग केँ कोोनो एहन लोकनि द्वारा लिखल गेल अछि जे बेनाम बनल रहब चाहैत अछि."
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 केँ \n"
+"%2 केर द्वारा लिखल गेल"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "कृप्या http://bugs.kde.org क' उपयोग बग रिपोट क' लेल करू.\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "कृप्या बग रिपोट %1 केँ भेजू.\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "लाइब्रेरी %1 केडीइ ४ योग्य फैक्टरी प्रदान नहि करता."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "पूर्वाह्न"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "अपराह्न"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "पूर्वाह्न"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "@action"
+#| msgid "Mail"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "डाक"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "@item Text character set"
+#| msgid "Thai"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "थाइ"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "संपादन"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "सुपुर्द करू"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "पूर्वाह्न"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, fuzzy, qt-format
+#| msgctxt "memory size in 1024 bytes"
+#| msgid "%1 KB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, fuzzy, qt-format
+#| msgctxt "size in 1024 bytes"
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, fuzzy, qt-format
+#| msgctxt "size in 2^20 bytes"
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, fuzzy, qt-format
+#| msgctxt "size in 2^30 bytes"
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, fuzzy, qt-format
+#| msgctxt "size in 2^50 bytes"
+#| msgid "%1 PiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, fuzzy, qt-format
+#| msgctxt "size in 2^60 bytes"
+#| msgid "%1 EiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, fuzzy, qt-format
+#| msgctxt "size in 2^70 bytes"
+#| msgid "%1 ZiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, fuzzy, qt-format
+#| msgctxt "size in 2^80 bytes"
+#| msgid "%1 YiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 दिन"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 घंटा"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 मिनट"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 सकेंड"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 मिली-सकेंड"
+msgstr[1] "%1 मिली-सकेंड"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 दिन"
+msgstr[1] "%1 दिन"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 घंटा"
+msgstr[1] "%1 घंटा"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 मिनट"
+msgstr[1] "%1 मिनट"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 सकेंड"
+msgstr[1] "%1 सकेंड"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 आओर %2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+#| msgid "Invalid item."
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "अवैध मद."
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "आइ"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "कालि"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "अगिला माह"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "अंतिम पृष्ठ (&L)"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "अंतिम पृष्ठ (&L)"
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "अंतिम पृष्ठ (&L)"
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "अगिला माह"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "अगिला वर्ष"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "अगिला वर्ष"
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "अगिला वर्ष"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "अगिला वर्ष"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "अगिला वर्ष"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "%1 is 'the slot asked for foo arguments', %2 is 'but there are only bar "
+#| "available'"
+#| msgid "%1, %2."
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2."
--- /dev/null
+# translation of kdelibs4.po to Macedonian
+#
+# Copyright (C) 2000,2002,2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+# Dimitar Indovski <dime@gord.com.mk>
+# Damjan Janevski <miopa@freemail.org.mk>
+# Dragan Sekulovski <d_sekulovski@yahoo.com>
+#
+# Maratonec , 2002.
+# Dragan Bocevski <d_bocevski@hotmail.com>, 2002.
+# Danko Ilik <danko@mindless.com>, 2002,2003.
+# Bozidar Proevski <bobibobi@freemail.com.mk>, 2002,2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010.
+# Danko Ilik <danko@on.net.mk>, 2003.
+# Darko Nikolovski <darkon@macedonia.homelinux.org>, 2003.
+# Ivan Dimitrov <ivan34mk@yahoo.com>, 2003.
+# Magdica Shambevska <magdica@yahoo.com>, 2004.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2010-01-27 10:39+0100\n"
+"Last-Translator: Bozidar Proevski <bobibobi@freemail.com.mk>\n"
+"Language-Team: Macedonian <mkde-l10n@lists.sourceforge.net>\n"
+"Language: mk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: Plural-Forms: nplurals=3; plural=n%10==1 ? 0 : n%10==2 ? 1 : "
+"2;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"За оваа програма не е издадена лиценца.\n"
+"Проверете ги документацијата на програмата\n"
+"или нејзиниот изворен код\n"
+"за евентуална лиценцираност.\n"
+
+#: lib/kaboutdata.cpp:306
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Оваа програма се дистрибуира под условите на %1."
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:356
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:360
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Лиценцата BSD"
+
+#: lib/kaboutdata.cpp:361
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Лиценцата BSD"
+
+#: lib/kaboutdata.cpp:364
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Лиценцата Artistic"
+
+#: lib/kaboutdata.cpp:365
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Лиценцата Artistic"
+
+#: lib/kaboutdata.cpp:368
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Лиценцата Q Public License"
+
+#: lib/kaboutdata.cpp:372
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:376
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:381
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr ""
+
+#: lib/kaboutdata.cpp:385
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Сопствено"
+
+#: lib/kaboutdata.cpp:388
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Не е зададено"
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE е преведен на повеќе светски јазици благодарение на работата на "
+"повеќе преведувачки тимови низ целиот свет.</p><p>За повеќе информации "
+"посетете ја Интернет-страницата http://i18n.kde.org</p><p>Информации за "
+"нашата работа може да добиете на страницата http://mkde.sourceforge.net</p>"
+
+#: lib/kaboutdata.cpp:1165
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Прикажува информации за авторот"
+
+#: lib/kaboutdata.cpp:1166
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Прикажува информации за лиценцата"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1178
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Оваа апликација е напишана од некој што сака да остане анонимен."
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 е напишано од\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Користете го http://bugs.kde.org за пријавување бубачки.\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Користете го %1 за пријавување бубачки.\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Библиотеката %1 нема соодветна работилница компатибилна со KDE4."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "pm"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "@action"
+#| msgid "Mail"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "По пошта"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "@item Text character set"
+#| msgid "Thai"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Тајландски"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Уредување"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Испрати"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, fuzzy, qt-format
+#| msgctxt "memory size in 1024 bytes"
+#| msgid "%1 KB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, fuzzy, qt-format
+#| msgctxt "size in 1024 bytes"
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, fuzzy, qt-format
+#| msgctxt "size in 2^20 bytes"
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, fuzzy, qt-format
+#| msgctxt "size in 2^30 bytes"
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 PiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, fuzzy, qt-format
+#| msgctxt "size in 2^50 bytes"
+#| msgid "%1 EiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, fuzzy, qt-format
+#| msgctxt "size in 2^60 bytes"
+#| msgid "%1 ZiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, fuzzy, qt-format
+#| msgctxt "size in 2^70 bytes"
+#| msgid "%1 YiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 дена"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 часа"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 минути"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 секунди"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 милисекунда"
+msgstr[1] "%1 милисекунда"
+msgstr[2] "%1 милисекунда"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 дена"
+msgstr[1] "%1 дена"
+msgstr[2] "%1 дена"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 часа"
+msgstr[1] "%1 часа"
+msgstr[2] "%1 часа"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 минути"
+msgstr[1] "%1 минути"
+msgstr[2] "%1 минути"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 секунди"
+msgstr[1] "%1 секунди"
+msgstr[2] "%1 секунди"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 и %2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+#| msgid "invalid flags"
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "невалидни знаменца"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Денес"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Вчера"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Следен месец"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "П&оследна страница"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "П&оследна страница"
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "П&оследна страница"
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Следен месец"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Следна година"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Следна година"
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Следна година"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Следна година"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Следна година"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "%1 is 'the slot asked for foo arguments', %2 is 'but there are only bar "
+#| "available'"
+#| msgid "%1, %2."
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2."
--- /dev/null
+# translation of kdelibs4.po to
+# Malayalam translation of kdelibs4.
+# Copyright (C) 2007-2010 This_file_is_part_of_KDE
+# This file is distributed under the same license as the kdelibs package.
+# Anoop | അനൂപ് Panavalappil | പനവളപ്പില് <gnuanu@gmail.com>, 2008.
+# ANI PETER|അനി പീറ്റര് <peter.ani@gmail.com>, 2008.
+# Maxin B. John <maxinbjohn@gmail.com>, 2007.
+# Manu S Madhav | മനു എസ് മാധവ് <manusmad@gmail.com>, 2008.
+# Praveen Arimbrathodiyil <pravi.a@gmail.com>, 2007, 2008, 2009, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2010-12-29 15:32+0530\n"
+"Last-Translator: \n"
+"Language-Team: <en@li.org>\n"
+"Language: ml\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: KBabel 1.11.4\n"
+"X-Poedit-Country: INDIA\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"ഈ പ്രോഗ്രാമിനു് അനുമതികളൊന്നും പ്രസ്താപിച്ചിട്ടില്ല.\n"
+"അനുമതി ഉടമ്പടികളെക്കുറിച്ചറിയാന് ദയവായി സഹായകക്കുറിപ്പോ\n"
+" ഉറവിടമോ പരിശോധിയ്ക്കുക.\n"
+
+#: lib/kaboutdata.cpp:306
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "ഈ പ്രോഗ്രാം %1 പ്രകാരമുള്ള നിബന്ധനകള്ക്കനുസരിച്ചാണ് വിതരണം ചെയ്തിട്ടുള്ളത്."
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "ജിപിഎല് വി2"
+
+#: lib/kaboutdata.cpp:353
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "ഗ്നു ജനറല് പബ്ലിക് ലൈസന്സ് ലക്കം 2"
+
+#: lib/kaboutdata.cpp:356
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "എല്ജിപിഎല് വി2"
+
+#: lib/kaboutdata.cpp:357
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "ഗ്നു ലസ്സര് ജനറല് പബ്ലിക് ലൈസന്സ് ലക്കം 2"
+
+#: lib/kaboutdata.cpp:360
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "ബിഎസ്ഡി ലൈസന്സ്"
+
+#: lib/kaboutdata.cpp:361
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "ബിഎസ്ഡി ലൈസന്സ്"
+
+#: lib/kaboutdata.cpp:364
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "ആര്ട്ടിസ്റ്റിക് ലൈസന്സ്"
+
+#: lib/kaboutdata.cpp:365
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "ആര്ട്ടിസ്റ്റിക് ലൈസന്സ്"
+
+#: lib/kaboutdata.cpp:368
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "ക്യുപിഎല് v1.0"
+
+#: lib/kaboutdata.cpp:369
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "ക്യു പബ്ലിക് ലൈസന്സ്"
+
+#: lib/kaboutdata.cpp:372
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "ജിപിഎല് വി3"
+
+#: lib/kaboutdata.cpp:373
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "ഗ്നു ജനറല് പബ്ലിക് ലൈസന്സ് ലക്കം 3"
+
+#: lib/kaboutdata.cpp:376
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "എല്ജിപിഎല് വി3"
+
+#: lib/kaboutdata.cpp:377
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "ഗ്നു ലെസ്സര് ജനറല് പബ്ലിക് ലൈസന്സ് ലക്കം 3"
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "എല്ജിപിഎല് വി2"
+
+#: lib/kaboutdata.cpp:381
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "ഗ്നു ലസ്സര് ജനറല് പബ്ലിക് ലൈസന്സ് ലക്കം 2"
+
+#: lib/kaboutdata.cpp:385
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "സ്വന്തമായുള്ള"
+
+#: lib/kaboutdata.cpp:388
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "വ്യക്തമാക്കിയിട്ടില്ല"
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>കെഡിഇ മലയാളം നിങ്ങള്ക്കായി അവതരിപ്പിക്കുന്നതു് സ്വതന്ത്ര മലയാളം കമ്പ്യൂട്ടിങ്ങ്പ്രവര്ത്തകരാണു്.</"
+"p><p>സ്വതന്ത്ര മലയാളം കമ്പ്യൂട്ടിങ്ങ് കൂട്ടായ്മയെപ്പറ്റി കൂടുതലറിയാനും മലയാളം കമ്പ്യൂട്ടിങ്ങ് "
+"പ്രവര്ത്തനങ്ങളില് പങ്കുചേരാനും <a href=\"http://smc.org.in\">http://smc.org.in </a> "
+"എന്ന വെബ്സൈറ്റ് സന്ദര്ശിയ്ക്കുക</p>"
+
+#: lib/kaboutdata.cpp:1165
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "രചയിതാവിനെക്കുറിച്ചുള്ള വിവരം കാണിയ്ക്കുക"
+
+#: lib/kaboutdata.cpp:1166
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "അനുമതി പത്രത്തെക്കുറിച്ചുള്ള വിവരം കാണിയ്ക്കുക"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1178
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "പേര് വെളിപ്പെടുത്താനാഗ്രഹിയ്ക്കാത്തോരാളാണ് ഈ പ്രയോഗമെഴുതിയിട്ടുള്ളത്."
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%2 ആണു് %1\n"
+"എഴുതിയതു്"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "ദയവായി പിഴവുകളറിയിയ്ക്കാനായി http://bugs.kde.org ഉപയോഗിയ്ക്കുക.\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "%1-ലേക്കു് പിശകുകള് രേഖപ്പെടുത്തുക.\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "'%1' എന്ന ലൈബ്രറി കെഡിഇ നാലിനോട് ചേര്ന്നുപോകുന്ന ഒരു ഫാക്ടറി നല്കുന്നില്ല."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "രാവിലെ"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "വൈകുന്നേരം"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "രാവിലെ"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "എഎം"
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "@action"
+#| msgid "Mail"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "മെയില്"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "@item Text character set"
+#| msgid "Thai"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "ഥായി"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "പി"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "പി"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "മാറ്റം വരുത്തുക"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "സമര്പ്പിക്കുക"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "രാവിലെ"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 ബി"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 കെബി"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 എംബി"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 ജിബി"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 ടിബി"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 പീബി"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 ഇബി"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ഇസഡ്ബി"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 വൈബി"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 ബി"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, fuzzy, qt-format
+#| msgctxt "memory size in 1024 bytes"
+#| msgid "%1 KB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 കെബി"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 എംബി"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 ജിബി"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 ടിബി"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 പീബി"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 ഇബി"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ഇസഡ്ബി"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 വൈബി"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 ബി"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, fuzzy, qt-format
+#| msgctxt "size in 1024 bytes"
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 കെഐബി"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, fuzzy, qt-format
+#| msgctxt "size in 2^20 bytes"
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 എംഐബി"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, fuzzy, qt-format
+#| msgctxt "size in 2^30 bytes"
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 ജിഐബി"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 ടിഐബി"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, fuzzy, qt-format
+#| msgctxt "size in 2^50 bytes"
+#| msgid "%1 PiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 പിഐബി"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, fuzzy, qt-format
+#| msgctxt "size in 2^60 bytes"
+#| msgid "%1 EiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 ഇഐബി"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, fuzzy, qt-format
+#| msgctxt "size in 2^70 bytes"
+#| msgid "%1 ZiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ഇസഡ്ഐബി"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, fuzzy, qt-format
+#| msgctxt "size in 2^80 bytes"
+#| msgid "%1 YiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 വൈഐബി"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 ദിവസങ്ങള്"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 മണിക്കൂറുകള്"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 മിനിറ്റുകള്"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 സെക്കന്റുകള്"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 മില്ലിസെക്കന്റുകള്"
+msgstr[1] "%1 മില്ലിസെക്കന്റുകള്"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 ദിവസങ്ങള്"
+msgstr[1] "%1 ദിവസങ്ങള്"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 മണിക്കൂറുകള്"
+msgstr[1] "%1 മണിക്കൂറുകള്"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 മിനിറ്റുകള്"
+msgstr[1] "%1 മിനിറ്റുകള്"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 സെക്കന്റുകള്"
+msgstr[1] "%1 സെക്കന്റുകള്"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 ഉം %2 ഉം"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+#| msgid "Invalid item."
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "തെറ്റായ വസ്തു."
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "ഇന്ന്"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "ഇന്നലെ"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "കഴിഞ്ഞ മാസം"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "അവസാന വര്ഷം"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+#| msgctxt ""
+#| "referring to a filter on the modification and usage date of files/"
+#| "resources"
+#| msgid "Last Week"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "അവസാന ആഴ്ച"
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "അവസാന വര്ഷം"
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "അടുത്ത മാസം"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "അടുത്ത വര്ഷം"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "അടുത്ത വര്ഷം"
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "അടുത്ത വര്ഷം"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "അടുത്ത വര്ഷം"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "അടുത്ത വര്ഷം"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, fuzzy, qt-format
+#| msgctxt "City, Country"
+#| msgid "%1, %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# translation of kdelibs4.po to marathi
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Sandeep Shedmake <sandeep.shedmake@gmail.com>, 2008, 2009.
+# Chetan Khona <chetan@kompkin.com>, 2012, 2013, 2014.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2014-10-28 15:25+0530\n"
+"Last-Translator: Chetan Khona <chetan@kompkin.com>\n"
+"Language-Team: Marathi <kde-i18n-doc@kde.org>\n"
+"Language: mr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"X-Generator: Lokalize 1.5\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"या प्रोग्राम करिता कुठल्याही परवाना अटींचा उल्लेख नही.\n"
+"कृपया परवाना अटींकरिता\n"
+"दस्तऐवजाचे स्रोत पहा.\n"
+
+#: lib/kaboutdata.cpp:306
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "कार्यक्रम %1 च्या अटी अंतर्गत वितरीत केला गेला आहे."
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License Version 2"
+
+#: lib/kaboutdata.cpp:356
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:360
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD परवाना"
+
+#: lib/kaboutdata.cpp:361
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD परवाना"
+
+#: lib/kaboutdata.cpp:364
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "आर्टिस्टिक परवाना"
+
+#: lib/kaboutdata.cpp:365
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "आर्टिस्टिक परवाना"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public License"
+
+#: lib/kaboutdata.cpp:372
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License Version 3"
+
+#: lib/kaboutdata.cpp:376
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License Version 3"
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgctxt "KAboutLicense|@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:381
+#, fuzzy
+#| msgctxt "KAboutLicense|@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:385
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "ऐच्छिक"
+
+#: lib/kaboutdata.cpp:388
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "निश्चित नाही"
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt ""
+#| "KAboutData|replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>केडीई अनेक भाषांमध्ये भाषांतरीत आहे याकरिता जग भरातील सर्व अनुवादकांना हार्दिक शुभेच्छा."
+"</p><p>केडीई आंतर्राष्ट्रीयीकरणा विषयी अधिक माहिती करिता <a href=\"http://l10n."
+"kde.org\">http://l10n.kde.org</a> येथे जा</p>"
+
+#: lib/kaboutdata.cpp:1165
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "लेखकाविषयी माहिती दर्शवा"
+
+#: lib/kaboutdata.cpp:1166
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "परवानाविषयक माहिती दर्शवा"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1178
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "या अनुप्रयोग व्यक्ति द्वारे लिखीत आहे जो निनावी रहना पसंत करतो."
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "KAboutData CLI|"
+#| msgid "%s was written by:\n"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%s हे याद्वारे लिहीले गेले : \n"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "बग अहवाल सादरकरण्याकरिता http://bugs.kde.org वापरा.\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "कृपया बग %1 येथे लिहून पाठवा.\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "लायब्ररी %1 केप्लगइनफेक्ट्री पुरवित नाही."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "pm"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "गुरु"
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "AM"
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "मे"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "तिर"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "संपादित करा"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "सादर करा"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2.%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h%2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2m%3.%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 दिवस"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 तास"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 मिनीट"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 सेकंद"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n millisecond(s)"
+#| msgid_plural "%n millisecond(s)"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n मिलीसेकंद"
+msgstr[1] "%n मिलीसेकंद"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n day(s)"
+#| msgid_plural "%n day(s)"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n दिवस"
+msgstr[1] "%n दिवस"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n hour(s)"
+#| msgid_plural "%n hour(s)"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n तास"
+msgstr[1] "%n तास"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n minute(s)"
+#| msgid_plural "%n minute(s)"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n मिनीट"
+msgstr[1] "%n मिनीट"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n second(s)"
+#| msgid_plural "%n second(s)"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n सेकंद"
+msgstr[1] "%n सेकंद"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 व %2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+#| msgid "Invalid item."
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "अवैध वस्तु."
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "उद्या"
+
+#: lib/util/kformatprivate.cpp:521
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "आज"
+
+#: lib/util/kformatprivate.cpp:523
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "काल"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+#| msgctxt "@option last month"
+#| msgid "Last Month"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "गेला महिना"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "मंगळवार"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "बुधवार"
+
+#: lib/util/kformatprivate.cpp:535
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "गुरूवार"
+
+#: lib/util/kformatprivate.cpp:537
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "शुक्रवार"
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "शनिवार"
+
+#: lib/util/kformatprivate.cpp:541
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "रविवार"
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+#| msgctxt "@option next month"
+#| msgid "Next Month"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "पुढील महिना"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "मंगळवार"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "बुधवार"
+
+#: lib/util/kformatprivate.cpp:552
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "गुरूवार"
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "शुक्रवार"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "शनिवार"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "रविवार"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# kdelibs4 Bahasa Melayu (Malay) (ms)
+# Hasbullah bin Pit <sebol@ikhlas.com>, 2003.
+# Muhammad Najmi Ahmad Zabidi <md_najmi@yahoo.com>, 2003.
+# Mohd Nasir bin Che Embee <chadtce@linuxmail.org>, 2003.
+# Muhammad Najmi bin Ahmad Zabidi <najmi.zabidi@gmail.com>, 2006.
+# Sharuzzaman Ahmat Raslan <sharuzzaman@myrealbox.com>, 2006, 2007, 2008, 2009, 2010.
+# Sharuzzaman Ahmat Raslan <sharuzzaman@gmail.com>, 2010, 2011.
+# Copyright (C) 2008, 2009 K Desktop Environment
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2011-07-16 00:57+0800\n"
+"Last-Translator: Sharuzzaman Ahmat Raslan <sharuzzaman@gmail.com>\n"
+"Language-Team: Malay <kedidiemas@yahoogroups.com>\n"
+"Language: ms\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=1;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Terma lesen untuk program ini tidak dispesifikkan.\n"
+"Sila periksa dokumentasi atau sumber maklumat untuk terma lesen.\n"
+
+#: lib/kaboutdata.cpp:306
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Program ini diedarkan di bawah terma %1."
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License Version 2"
+
+#: lib/kaboutdata.cpp:356
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:360
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Lesen BSD"
+
+#: lib/kaboutdata.cpp:361
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Lesen BSD"
+
+#: lib/kaboutdata.cpp:364
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Lesen Artistik"
+
+#: lib/kaboutdata.cpp:365
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Lesen Artistik"
+
+#: lib/kaboutdata.cpp:368
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Lesen Awam Q"
+
+#: lib/kaboutdata.cpp:372
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License Version 3"
+
+#: lib/kaboutdata.cpp:376
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License Version 3"
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:381
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:385
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Tersendiri"
+
+#: lib/kaboutdata.cpp:388
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Tidak dinyatakan"
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE diterjemahkan kepada pelbagai bahasa oleh pasukan penterjemah di "
+"serata dunia.</p><p>Untuk maklumat lanjut berkaitan pengantarabangsaan KDE, "
+"sila lawat http://i18n.kde.org</p>"
+
+#: lib/kaboutdata.cpp:1165
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Papar maklumat penulis"
+
+#: lib/kaboutdata.cpp:1166
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Papar maklumat lesen"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1178
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Aplikasi ini ditulis oleh seseorang yang ingin kekal tanpa nama."
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 ditulis oleh\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr ""
+"Sila guna http://bugs.kde.org untuk melaporkan pepijat, jangan mel terus "
+"kepada pengarang.\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Sila lapor pepijat ke %1.\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Pustaka %1 tidak menawarkan pengilang serasi KDE 4."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "pm"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "AM"
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "@action"
+#| msgid "Mail"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mel"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "@item Text character set"
+#| msgid "Thai"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Thai"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Edit"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Hantar"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, fuzzy, qt-format
+#| msgctxt "memory size in 1024 bytes"
+#| msgid "%1 KB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, fuzzy, qt-format
+#| msgctxt "size in 1024 bytes"
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, fuzzy, qt-format
+#| msgctxt "size in 2^20 bytes"
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, fuzzy, qt-format
+#| msgctxt "size in 2^30 bytes"
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, fuzzy, qt-format
+#| msgctxt "size in 2^50 bytes"
+#| msgid "%1 PiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, fuzzy, qt-format
+#| msgctxt "size in 2^60 bytes"
+#| msgid "%1 EiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, fuzzy, qt-format
+#| msgctxt "size in 2^70 bytes"
+#| msgid "%1 ZiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, fuzzy, qt-format
+#| msgctxt "size in 2^80 bytes"
+#| msgid "%1 YiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 hari"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 jam"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minit"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 saat"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 milisaat"
+msgstr[1] "%1 milisaat"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 hari"
+msgstr[1] "%1 hari"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 jam"
+msgstr[1] "%1 jam"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 minit"
+msgstr[1] "%1 minit"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 saat"
+msgstr[1] "%1 saat"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 dan %2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Tidak sah."
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Hari ini"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Semalam"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Bulan Lepas"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "Tahun Lepas"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+#| msgctxt ""
+#| "referring to a filter on the modification and usage date of files/"
+#| "resources"
+#| msgid "Last Week"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Minggu Lepas"
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "Tahun Lepas"
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Maju Bulan"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Tahun Seterusnya"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Maju"
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Tahun Seterusnya"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Tahun Seterusnya"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Tahun Seterusnya"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "%1 is 'the slot asked for foo arguments', %2 is 'but there are only bar "
+#| "available'"
+#| msgid "%1, %2."
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# Translation of kcoreaddons5_qt to Norwegian Bokmål
+#
+# Knut Yrvin <knut.yrvin@gmail.com>, 2002, 2003, 2004, 2005.
+# Bjørn Steensrud <bjornst@skogkatt.homelinux.org>, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015.
+# Eskild Hustvedt <zerodogg@skolelinux.no>, 2004, 2005.
+# Gaute Hvoslef Kvalnes <gaute@verdsveven.com>, 2004, 2005.
+# Axel Bojer <fri_programvare@bojer.no>, 2005, 2006.
+# Nils Kristian Tomren <slx@nilsk.net>, 2005, 2007.
+# Øyvind A. Holm <sunny@sunbase.org>, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-02-28 03:44+0000\n"
+"PO-Revision-Date: 2015-02-24 20:40+0100\n"
+"Last-Translator: Bjørn Steensrud <bjornst@skogkatt.homelinux.org>\n"
+"Language-Team: Norwegian Bokmål <i18n-nb@lister.ping.uio.no>\n"
+"Language: nb\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.5\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Environment: kde\n"
+"X-Accelerator-Marker: &\n"
+"X-Text-Markup: qtrich\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Det er ikke oppgitt lisensbetingelser for dette programmet.\n"
+"Lisensbetingelsene kan være i dokumentasjonen eller kildekoden.\n"
+
+#: lib/kaboutdata.cpp:306
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Dette programmet er gitt ut under betingelsene i %1."
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License Version 2"
+
+#: lib/kaboutdata.cpp:356
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:360
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD-lisens"
+
+#: lib/kaboutdata.cpp:361
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD-lisens"
+
+#: lib/kaboutdata.cpp:364
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Kunstnerisk lisens"
+
+#: lib/kaboutdata.cpp:365
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Kunstnerisk lisens"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public License"
+
+#: lib/kaboutdata.cpp:372
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License Version 3"
+
+#: lib/kaboutdata.cpp:376
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License Version 3"
+
+#: lib/kaboutdata.cpp:380
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr ""
+
+#: lib/kaboutdata.cpp:381
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr ""
+
+#: lib/kaboutdata.cpp:385
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Tilpasset"
+
+#: lib/kaboutdata.cpp:388
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Ikke oppgitt"
+
+#: lib/kaboutdata.cpp:937
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1165
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Vis forfatterinformasjon"
+
+#: lib/kaboutdata.cpp:1166
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Viser lisensinformasjon"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1178
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Dette programmet ble skrevet av noen som ønsker å være anonyme."
+
+#: lib/kaboutdata.cpp:1180
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1191
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1193
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr ""
+
+#: lib/plugin/kpluginloader.cpp:122
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Biblioteket %1 inneholder ikke en KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr ""
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr ""
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2.%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h%2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2m%3.%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 dager"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 timer"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minutter"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 sekunder"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n millisekund(er)"
+msgstr[1] "%n millisekund(er)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n dag(er)"
+msgstr[1] "%n dag(er)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n time(r)"
+msgstr[1] "%n time(r)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minutt(er)"
+msgstr[1] "%n minutt(er)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n sekund(er)"
+msgstr[1] "%n sekund(er)"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 og %2"
+
+#: lib/util/kformatprivate.cpp:509
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "I morgen"
+
+#: lib/util/kformatprivate.cpp:521
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "I dag"
+
+#: lib/util/kformatprivate.cpp:523
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "I går"
+
+#: lib/util/kformatprivate.cpp:529
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:531
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:533
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:539
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:546
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:548
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:550
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:554
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:556
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:558
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr ""
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# Translation of kdelibs4.po to Low Saxon
+# Heiko Evermann <heiko@evermann.de>, 2004.
+# Heiko Evermann <heiko.evermann@gmx.de>, 2004, 2005.
+# Volker Jockheck <volkae@gmx.net>, 2004.
+# Sönke Dibbern <s_dibbern@web.de>, 2004, 2005, 2006, 2007, 2008, 2009, 2014.
+# Manfred Wiese <m.j.wiese@web.de>, 2008, 2009, 2010, 2011, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2014-05-11 00:55+0200\n"
+"Last-Translator: Sönke Dibbern <s_dibbern@web.de>\n"
+"Language-Team: Low Saxon <kde-i18n-nds@kde.org>\n"
+"Language: nds\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.4\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"De Lizenz för dit Programm is nich angeven.\n"
+"Bitte kiek in de Dokmentatschoon oder in den Bornkode,\n"
+"wat dor över de Lizenz steiht.\n"
+
+#: lib/kaboutdata.cpp:306
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Dit Programm warrt ünner de Lizenz „%1“ verdeelt."
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNUs Allmeen apen Verlööfnis, Verschoon 2"
+
+#: lib/kaboutdata.cpp:356
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNUs Lütter allmeen apen Verlööfnis, Verschoon 2"
+
+#: lib/kaboutdata.cpp:360
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD-Verlööfnis"
+
+#: lib/kaboutdata.cpp:361
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD-Verlööfnis"
+
+#: lib/kaboutdata.cpp:364
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Kunst-Verlööfnis"
+
+#: lib/kaboutdata.cpp:365
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Kunst-Verlööfnis"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Apen Q-Verlööfnis"
+
+#: lib/kaboutdata.cpp:372
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNUs Allmeen apen Verlööfnis, Verschoon 3"
+
+#: lib/kaboutdata.cpp:376
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNUs Lütter allmeen apen Verlööfnis, Verschoon 3"
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgctxt "KAboutLicense|@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:381
+#, fuzzy
+#| msgctxt "KAboutLicense|@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNUs Lütter allmeen apen Verlööfnis, Verschoon 2"
+
+#: lib/kaboutdata.cpp:385
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Anner"
+
+#: lib/kaboutdata.cpp:388
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Nich angeven"
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt ""
+#| "KAboutData|replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE warrt na vele Spraken översett, dor an arbeidt Översetterkoppeln de "
+"hele Welt rund.</p><p>Mehr Informatschoon över dat Översetten vun KDE gifft "
+"dat op <a href=\"http://l10n.kde.org\">http://l10n.kde.org</a>.</p>"
+
+#: lib/kaboutdata.cpp:1165
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Informatschonen över den Autor wiesen"
+
+#: lib/kaboutdata.cpp:1166
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Informatschonen över de Bruukverlööfnis wiesen"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+#, fuzzy
+#| msgid "Filename Error"
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "Dateinaam-Fehler"
+
+#: lib/kaboutdata.cpp:1178
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Dit Programm hett een schreven, de anonüm blieven will."
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "KAboutData CLI|"
+#| msgid "%s was written by:\n"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%s wöör schreven vun:\n"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Bitte maak Fehlers op http://bugs.kde.org künniog.\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Bitte maak Fehlers bi %1 künnig.\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "De Bibliotheek „%1“ bargt keen „KPluginFactory“."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "vm"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "nm"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "vm"
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Ok"
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "OK"
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgctxt "Coptic month 4 - ShortName"
+#| msgid "Kia"
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Kiy"
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "vm"
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mai"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tir"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "Coptic weekday 4 - ShortDayName"
+#| msgid "Pti"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pti"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Bewerken"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Afschicken"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "vm"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1, %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 kB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1min %2,%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1min %2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h %2min"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h %2min %3,%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h %2min %3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2,%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1.%2:%3,%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1.%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 Daag"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 Stünnen"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 Minuten"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 Sekunnen"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n millisecond(s)"
+#| msgid_plural "%n millisecond(s)"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n Millisekunn"
+msgstr[1] "%n Millisekunn"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n day(s)"
+#| msgid_plural "%n day(s)"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n Dag"
+msgstr[1] "%n Dag"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n hour(s)"
+#| msgid_plural "%n hour(s)"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n Stünn"
+msgstr[1] "%n Stünn"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n minute(s)"
+#| msgid_plural "%n minute(s)"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n Minuut"
+msgstr[1] "%n Minuut"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n second(s)"
+#| msgid_plural "%n second(s)"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n Sekunn"
+msgstr[1] "%n Sekunn"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 un %2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+#| msgid "Invalid item."
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Leeg Indrag"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Morgen"
+
+#: lib/util/kformatprivate.cpp:521
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Vundaag"
+
+#: lib/util/kformatprivate.cpp:523
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Güstern"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+#| msgctxt "@option last month"
+#| msgid "Last Month"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Verleden Maand"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "Dingsdag"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Middeweken"
+
+#: lib/util/kformatprivate.cpp:535
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "Dunnersdag"
+
+#: lib/util/kformatprivate.cpp:537
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "Freedag"
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "Sünnavend"
+
+#: lib/util/kformatprivate.cpp:541
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "Sünndag"
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+#| msgctxt "@option next month"
+#| msgid "Next Month"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Tokamen Maand"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Dingsdag"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Middeweken"
+
+#: lib/util/kformatprivate.cpp:552
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "Dunnersdag"
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Freedag"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Sünnavend"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Sünndag"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1 Klock %2"
--- /dev/null
+# translation of kdelibs4.po to Nepali
+# Mahesh Subedi <submanesh@gmail.com>, 2006, 2007.
+# Shiva Prasad Pokharel <pokharelshiva@hotmail.com>, 2006, 2007.
+# shyam krishna ball <shyam@mpp.org.np>, 2006.
+# shyam krishna bal <shyamkrishna_bal@yahoo.com>, 2006, 2007.
+# Shiva Pokharel <shiva@mpp.org.np>, 2007.
+# Nabin Gautam <nabin@mpp.org.np>, 2007.
+# Shiva Prasad Pokharel <pokharelshiv@gmail.com>, 2007.
+# Shyam Krishna Bal <shyamkrishna_bal@yahoo.com>, 2007.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2007-11-05 15:41+0545\n"
+"Last-Translator: Shyam Krishna Bal <shyamkrishna_bal@yahoo.com>\n"
+"Language-Team: Nepali <info@mpp.org.np>\n"
+"Language: ne\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n !=1\n"
+"X-Generator: KBabel 1.11.4\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"कार्यक्रमका लागि इजाजतपत्र शर्त निर्दिष्ट गरिएको छैन ।\n"
+"कृपया कुनै पनि इजाजतपत्र\n"
+"शर्तका लागि स्रोत वा कागजात जाँच गर्नुहोस् ।\n"
+
+#: lib/kaboutdata.cpp:306
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "यो कार्यक्रम %1 को शर्त अन्तर्गत वितरण गरिन्छ ।"
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgid "GPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL"
+
+#: lib/kaboutdata.cpp:353
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU साधारण सार्वजनिक इजाजतपत्र संस्करण 2"
+
+#: lib/kaboutdata.cpp:356
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:357
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU साधारण सार्वजनिक इजाजतपत्र संस्करण 2"
+
+#: lib/kaboutdata.cpp:360
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD इजाजतपत्र"
+
+#: lib/kaboutdata.cpp:361
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD इजाजतपत्र"
+
+#: lib/kaboutdata.cpp:364
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "कलात्मक इजाजतपत्र"
+
+#: lib/kaboutdata.cpp:365
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "कलात्मक इजाजतपत्र"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr ""
+
+#: lib/kaboutdata.cpp:369
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q सार्वजनिक इजाजतपत्र"
+
+#: lib/kaboutdata.cpp:372
+#, fuzzy
+#| msgid "GPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL"
+
+#: lib/kaboutdata.cpp:373
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU साधारण सार्वजनिक इजाजतपत्र संस्करण 2"
+
+#: lib/kaboutdata.cpp:376
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:377
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU साधारण सार्वजनिक इजाजतपत्र संस्करण 2"
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:381
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU साधारण सार्वजनिक इजाजतपत्र संस्करण 2"
+
+#: lib/kaboutdata.cpp:385
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "अनुकूल"
+
+#: lib/kaboutdata.cpp:388
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "निर्दिष्ट नगरिएको"
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>केडीई धेरै भाषामा अनुवाद गरिएको छ । संसार भरीका सबै अनुवादक समूहलाई कामका लागि "
+"धन्यवाद ।</p><p>केडीई अन्तराष्ट्रियकरणको बारेमा अधिक जानकारीका लागि यो साइट हेर्नुहोस् "
+"<a href=\"http://l10n.kde.org\">http://l10n.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1165
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "लेखक सूचना देखाउनुहोस्"
+
+#: lib/kaboutdata.cpp:1166
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "इजाजतपत्र सूचना देखाउनुहोस्"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+#, fuzzy
+#| msgid "Filename Error"
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "फाइलनाम त्रुटि"
+
+#: lib/kaboutdata.cpp:1178
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "यस अनुप्रयोगलाई नाम गोप्य राख्न चाहने व्यक्तिद्वारा लेखिएको हो ।"
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 लाई\n"
+"%2 द्वारा लेखियो"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "कृपया बग प्रतिवेदन गर्न http://bugs.kde.org प्रयोग गर्नुहोस् ।\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "कृपया %1 मा बग प्रतिवेदन गर्नुहोस् ।\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "%1 लाइब्रेरीले केडीई ४ मिल्दो कारखाना प्रस्ताव गर्दैन ।"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "पूर्वान्ह"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "अपरान्ह"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "पूर्वान्ह"
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Ok"
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "ठीक छ"
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "खा"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "मे"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tir"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "सम्पादन गर्नुहोस्"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "पेश गर्नुहोस्"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "पूर्वान्ह"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MiB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GiB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TiB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, fuzzy, qt-format
+#| msgid "%1 KiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KiB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MiB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GiB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TiB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, fuzzy, qt-format
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 TiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, fuzzy, qt-format
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 दिन"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, fuzzy, qt-format
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 घण्टा"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 मिनेट"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, fuzzy, qt-format
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 सेकेन्ड"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgid "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 मिलिसेकेन्ड"
+msgstr[1] "%1 मिलिसेकेन्ड"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 दिन"
+msgstr[1] "%1 दिन"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 घण्टा"
+msgstr[1] "%1 घण्टा"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 मिनेट"
+msgstr[1] "%1 मिनेट"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 सेकेन्ड"
+msgstr[1] "%1 सेकेन्ड"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 %2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "अवैध फाइल नाम"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "आज"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "हिजो"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "पछिल्लो महिना"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "मङ्गलबार"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "बुधबार"
+
+#: lib/util/kformatprivate.cpp:535
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "बिहिबार"
+
+#: lib/util/kformatprivate.cpp:537
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "शुक्रबार"
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "शनिबार"
+
+#: lib/util/kformatprivate.cpp:541
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "आइतबार"
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "पछिल्लो महिना"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "मङ्गलबार"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "बुधबार"
+
+#: lib/util/kformatprivate.cpp:552
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "बिहिबार"
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "शुक्रबार"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "शनिबार"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "आइतबार"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1 %2"
--- /dev/null
+# translation of kdelibs4.po to Dutch
+# Copyright (C) 2000,2001,2002,2003, 2004 KDE e.v..
+# KTranslator Generated File
+# Nederlandse vertaling van kdelibs.
+# KDE-vertaalgroep Nederlands <i18n@kde.nl>, 2000, 2001, 2002.
+# Rinse de Vries <rinsedevries@kde.nl>,2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009.
+# Wilbert Berendsen <wbsoft@xs4all.nl>, 2003, 2004.
+# Bram Schoenmakers <bramschoenmakers@kde.nl>, 2004, 2005, 2006, 2007.
+# Tom Albers <tomalbers@kde.nl>, 2004.
+# Sander Koning <sanderkoning@kde.nl>, 2005.
+# Tijmen Baarda <tijmenbaarda@kde.nl>, 2005.
+# Freek de Kruijf <freekdekruijf@kde.nl>, 2008, 2009.
+# Kristof Bal <kristof.bal@gmail.com>, 2008, 2009.
+# Freek de Kruijf <freekdekruijf@kde.nl>, 2009, 2010.
+# Freek de Kruijf <freekdekruijf@kde.nl>, 2010, 2011, 2012.
+# Freek de Kruijf <freekdekruijf@kde.nl>, 2010, 2011, 2013, 2014, 2015, 2016, 2017, 2018.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2018-12-07 10:20+0100\n"
+"Last-Translator: Freek de Kruijf <freekdekruijf@kde.nl>\n"
+"Language-Team: Dutch <kde-i18n-nl@kde.org>\n"
+"Language: nl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Files: kfarch.cpp kfdird.cpp kfind.cpp kfindtop.cpp kfoptions.cpp kfsave.cpp "
+"kftabdlg.cpp kftypes.cpp kfwin.cpp main.cpp mkfdird.cpp mkfind.cpp\n"
+"X-Generator: Lokalize 2.0\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Er zijn geen licentievoorwaarden voor dit programma bekend.\n"
+"Consulteer de documentatie of de broncode voor licentie-\n"
+"voorwaarden.\n"
+
+#: lib/kaboutdata.cpp:306
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Dit programma wordt verspreid onder de voorwaarden van de %1."
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License versie 2"
+
+#: lib/kaboutdata.cpp:356
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License, versie 2"
+
+#: lib/kaboutdata.cpp:360
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD-licentie"
+
+#: lib/kaboutdata.cpp:361
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD-licentie"
+
+#: lib/kaboutdata.cpp:364
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artistic-licentie"
+
+#: lib/kaboutdata.cpp:365
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artistic-licentie"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public License"
+
+#: lib/kaboutdata.cpp:372
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License versie 3"
+
+#: lib/kaboutdata.cpp:376
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License, versie 3"
+
+#: lib/kaboutdata.cpp:380
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:381
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License Version 2.1"
+
+#: lib/kaboutdata.cpp:385
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Aangepast"
+
+#: lib/kaboutdata.cpp:388
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Niet gespecificeerd"
+
+#: lib/kaboutdata.cpp:937
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE is in veel verschillende talen beschikbaar dankzij de inzet van de "
+"vele vertaalteams wereldwijd.</p><p>Kijk voor meer informatie op de "
+"Nederlandstalige KDE-pagina <a href=\"https://www.kde.nl\">https://www.kde."
+"nl</a>. Algemene informatie over de vertaling van KDE is te vinden op <a "
+"href=\"https://l10n.kde.org\">https://l10n.kde.org</a>.</p><p>Komt u een "
+"foutje tegen in een vertaling? Meld dit op <a href=\"https://www.kde.nl/bugs"
+"\">https://www.kde.nl/bugs</a></p>"
+
+#: lib/kaboutdata.cpp:1165
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Auteurinformatie tonen."
+
+#: lib/kaboutdata.cpp:1166
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Licentie-informatie tonen."
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "De basis bestandsnaam van het desktop-item voor deze toepassing."
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "bestandsnaam"
+
+#: lib/kaboutdata.cpp:1178
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr ""
+"Deze toepassing werd geschreven door iemand die anoniem wenst te blijven."
+
+#: lib/kaboutdata.cpp:1180
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 werd geschreven door:"
+
+#: lib/kaboutdata.cpp:1191
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Gebruik https://bugs.kde.org om bugs (programmafouten) te rapporteren."
+
+#: lib/kaboutdata.cpp:1193
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Rapporteer bugs aan %1."
+
+#: lib/plugin/kpluginloader.cpp:122
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "De bibliotheek %1 biedt geen KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "y"
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "z"
+
+#: lib/util/kformatprivate.cpp:118
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "a"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "f"
+
+#: lib/util/kformatprivate.cpp:120
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "p"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "µ"
+
+#: lib/util/kformatprivate.cpp:123
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "k"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Ki"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "M"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mi"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Gi"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "T"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ti"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pi"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "E"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ei"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "Z"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Zi"
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:140
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "bit"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B"
+
+#: lib/util/kformatprivate.cpp:146
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Hz"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2.%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h%2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2m%3.%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 dagen"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 uren"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minuten"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 seconden"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n milliseconde(n)"
+msgstr[1] "%n milliseconde(n)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n dag(en)"
+msgstr[1] "%n dag(en)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n u(u)r(en)"
+msgstr[1] "%n u(u)r(en)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minu(u)te(n)"
+msgstr[1] "%n minu(u)te(n)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n seconde(n)"
+msgstr[1] "%n seconde(n)"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 en %2"
+
+#: lib/util/kformatprivate.cpp:509
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Ongeldige datum"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Morgen"
+
+#: lib/util/kformatprivate.cpp:521
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Vandaag"
+
+#: lib/util/kformatprivate.cpp:523
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Gisteren"
+
+#: lib/util/kformatprivate.cpp:529
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Vorige aaandag"
+
+#: lib/util/kformatprivate.cpp:531
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "Vorige dinsdag"
+
+#: lib/util/kformatprivate.cpp:533
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Vorige woensdag"
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "Vorige donderdag"
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "Vorige vrijdag"
+
+#: lib/util/kformatprivate.cpp:539
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "Vorige zaterdag"
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "Vorige zondag"
+
+#: lib/util/kformatprivate.cpp:546
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Volgende maandag"
+
+#: lib/util/kformatprivate.cpp:548
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Volgende dinsdag"
+
+#: lib/util/kformatprivate.cpp:550
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Volgende woensdag"
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "Volgende donderdag"
+
+#: lib/util/kformatprivate.cpp:554
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Volgende vrijdag"
+
+#: lib/util/kformatprivate.cpp:556
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Volgende zaterdag"
+
+#: lib/util/kformatprivate.cpp:558
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Volgende zondag"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# Translation of kcoreaddons5_qt to Norwegian Nynorsk
+#
+# Gaute Hvoslef Kvalnes <gaute@verdsveven.com>, 2003, 2004, 2005, 2006.
+# Håvard Korsvoll <korsvoll@skulelinux.no>, 2003, 2005.
+# Karl Ove Hufthammer <karl@huftis.org>, 2004, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019.
+# Eirik U. Birkeland <eirbir@gmail.com>, 2008, 2009, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-02-28 03:44+0000\n"
+"PO-Revision-Date: 2019-01-05 14:05+0100\n"
+"Last-Translator: Karl Ove Hufthammer <karl@huftis.org>\n"
+"Language-Team: Norwegian Nynorsk <i18n-nn@lister.ping.uio.no>\n"
+"Language: nn\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 19.03.70\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Environment: kde\n"
+"X-Accelerator-Marker: &\n"
+"X-Text-Markup: qtrich\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Dette programmet har ikkje oppgjeve lisensvilkår.\n"
+"Du finn kanskje lisensvilkåra i hjelpeteksten\n"
+"eller kjeldekoden.\n"
+
+#: lib/kaboutdata.cpp:306
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Dette programmet er distribuert etter vilkåra i %1."
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License versjon 2"
+
+#: lib/kaboutdata.cpp:356
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License versjon 2"
+
+#: lib/kaboutdata.cpp:360
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD-lisensen"
+
+#: lib/kaboutdata.cpp:361
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD-lisensen"
+
+#: lib/kaboutdata.cpp:364
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artistic-lisensen"
+
+#: lib/kaboutdata.cpp:365
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artistic-lisensen"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public License"
+
+#: lib/kaboutdata.cpp:372
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License versjon 3"
+
+#: lib/kaboutdata.cpp:376
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License versjon 3"
+
+#: lib/kaboutdata.cpp:380
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:381
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License versjon 2.1"
+
+#: lib/kaboutdata.cpp:385
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Tilpassa"
+
+#: lib/kaboutdata.cpp:388
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Ikkje oppgjevne"
+
+#: lib/kaboutdata.cpp:937
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE er omsett til mange språk, og var eitt av dei første store programma "
+"som fanst på nynorsk.</p><p>Viss du finn skrivefeil, feilomsetjingar eller "
+"omsetjingar som kan forbetrast, set me pris på om du <a href=\"https://bugs."
+"kde.org/enter_bug.cgi?product=i18n&component=nn\">melder det inn i feil"
+"sporingssystemet vårt</a>. Du kan òg senda eit tips til <a href=\"mailto:"
+"i18n-nn@lister.ping.uio.no\">diskusjonslista</a> vår (<a href=\"https://"
+"lister.ping.uio.no/mailman/lister.ping.uio.no/listinfo/i18n-nn\">informasjon "
+"og arkiv</a>), eller direkte til <a href=\"mailto:karl@huftis.org\">Karl Ove "
+"Hufthammer</a> dersom du ikkje ønskjer at meldinga di skal verta offentleg"
+"gjord på lista.</p><p>Bruk dei same adressene viss du ønskjer å delta aktivt "
+"i nynorskomsetjinga av KDE. Me har alltid bruk for nye omsetjarar og "
+"korrekturlesarar!</p><p>Du finn meir informasjon om internasjonaliseringa av "
+"KDE på <a href=\"https://l10n.kde.org/\">http://l10n.kde.org/</a>.</p>"
+
+#: lib/kaboutdata.cpp:1165
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Vis forfattarinformasjon."
+
+#: lib/kaboutdata.cpp:1166
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Vis lisensinformasjon."
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Filnamn-stamme til skrivebordsoppføringa til programmet."
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "filnamn"
+
+#: lib/kaboutdata.cpp:1178
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Dette programmet er skrive av nokon som vil vera anonyme."
+
+#: lib/kaboutdata.cpp:1180
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 er skrive av:"
+
+#: lib/kaboutdata.cpp:1191
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Bruk https://bugs.kde.org/ for å melda frå om feil."
+
+#: lib/kaboutdata.cpp:1193
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Send feilrapportar til %1."
+
+#: lib/plugin/kpluginloader.cpp:122
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Biblioteket %1 tilbyr ikkje ein KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "y"
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "z"
+
+#: lib/util/kformatprivate.cpp:118
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "a"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "f"
+
+#: lib/util/kformatprivate.cpp:120
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "p"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "µ"
+
+#: lib/util/kformatprivate.cpp:123
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "k"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Ki"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "M"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mi"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Gi"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "T"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ti"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pi"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "E"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ei"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "Z"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Zi"
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:140
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "bit"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B"
+
+#: lib/util/kformatprivate.cpp:146
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Hz"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2,%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1t%2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1t%2m%3,%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1t%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1.%2,%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1.%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1.%2.%3,%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1.%2.%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 dagar"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 timar"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minutt"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 sekund"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n millisekund"
+msgstr[1] "%n millisekund"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n dag"
+msgstr[1] "%n dagar"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n time"
+msgstr[1] "%n timar"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minutt"
+msgstr[1] "%n minutt"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n sekund"
+msgstr[1] "%n sekund"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 og %2"
+
+#: lib/util/kformatprivate.cpp:509
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Ugyldig dato"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "I morgon"
+
+#: lib/util/kformatprivate.cpp:521
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "I dag"
+
+#: lib/util/kformatprivate.cpp:523
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "I går"
+
+#: lib/util/kformatprivate.cpp:529
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Sist måndag"
+
+#: lib/util/kformatprivate.cpp:531
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "Sist tysdag"
+
+#: lib/util/kformatprivate.cpp:533
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Sist onsdag"
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "Sist torsdag"
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "Sist fredag"
+
+#: lib/util/kformatprivate.cpp:539
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "Sist laurdag"
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "Sist sundag"
+
+#: lib/util/kformatprivate.cpp:546
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Førstkommande måndag"
+
+#: lib/util/kformatprivate.cpp:548
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Førstkommande tysdag"
+
+#: lib/util/kformatprivate.cpp:550
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Førstkommande onsdag"
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "Førstkommande torsdag"
+
+#: lib/util/kformatprivate.cpp:554
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Førstkommande fredag"
+
+#: lib/util/kformatprivate.cpp:556
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Førstkommande laurdag"
+
+#: lib/util/kformatprivate.cpp:558
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Førstkommande sundag"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# translation of kdelibs4.po to Occitan
+# Copyright (C) 2008 This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Yannig Marchegay (Kokoyaya) <yannig@marchegay.org>, 2007, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2008-08-06 00:07+0200\n"
+"Last-Translator: \n"
+"Language-Team: Occitan <oc@li.org>\n"
+"Language: oc\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"X-Generator: KBabel 1.11.4\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Cap de licéncia es pas estada especificada per aqueste programa.\n"
+"Consultatz la documentacion o lo còde font\n"
+"per trobar los tèrmes eventuals de la licéncia.\n"
+
+#: lib/kaboutdata.cpp:306
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Aqueste programa es distribuit segon los tèrmes de la %1."
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:356
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:360
+#, fuzzy
+#| msgid "License:"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Licéncia :"
+
+#: lib/kaboutdata.cpp:361
+#, fuzzy
+#| msgid "License:"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Licéncia :"
+
+#: lib/kaboutdata.cpp:364
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr ""
+
+#: lib/kaboutdata.cpp:365
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr ""
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr ""
+
+#: lib/kaboutdata.cpp:369
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr ""
+
+#: lib/kaboutdata.cpp:372
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:376
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:381
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr ""
+
+#: lib/kaboutdata.cpp:385
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Personalizat"
+
+#: lib/kaboutdata.cpp:388
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Non especificat"
+
+#: lib/kaboutdata.cpp:937
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1165
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Visualizar las informacions de l'autor"
+
+#: lib/kaboutdata.cpp:1166
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Visualizar las informacions de licéncia"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1178
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 foguèt escrich per\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgid ""
+#| "Please use <a href=\"http://bugs.kde.org\">http://bugs.kde.org</a> to "
+#| "report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr ""
+"Utilizatz <a href=\"http://bugs.kde.org\">http://bugs.kde.org</a> per "
+"senhalar de bògues.\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+#| msgid "Please report bugs to <a href=\"mailto:%1\">%2</a>.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Senhalatz los bògues a <a href=\"mailto:%1\">%2</a>.\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "pm"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Kha"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mai"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tir"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Edicion"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Sometre"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 o"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 o"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 Mo"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 Go"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 To"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 o"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 o"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 o"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 o"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 o"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, fuzzy, qt-format
+#| msgid "%1 KiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 ko"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 Mo"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 Go"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 To"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 o"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 o"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 o"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 o"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 o"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, fuzzy, qt-format
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 ko"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 Mo"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 Go"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 To"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 To"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 To"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 To"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 To"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, fuzzy, qt-format
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 jorns"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, fuzzy, qt-format
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 oras"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minutas"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, fuzzy, qt-format
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 segondas"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgid "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 milisegondas"
+msgstr[1] "%1 milisegondas"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 jorns"
+msgstr[1] "%1 jorns"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 oras"
+msgstr[1] "%1 oras"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 minutas"
+msgstr[1] "%1 minutas"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 segondas"
+msgstr[1] "%1 segondas"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 %2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "URL invalida"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Uèi"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Ièr"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Mes que ven"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "Dimars"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Dimècres"
+
+#: lib/util/kformatprivate.cpp:535
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "Dijòus"
+
+#: lib/util/kformatprivate.cpp:537
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "Divendres"
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "Dissabte"
+
+#: lib/util/kformatprivate.cpp:541
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "Dimenge"
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Mes que ven"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Dimars"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Dimècres"
+
+#: lib/util/kformatprivate.cpp:552
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "Dijòus"
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Divendres"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Dissabte"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Dimenge"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1 %2"
--- /dev/null
+# translation of kdelibs4.po to Oriya
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Manoj Kumar Giri <giri.manojkr@gmail.com>, 2008.
+# Manoj Kumar Giri <mgiri@redhat.com>, 2008, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2009-01-02 17:37+0530\n"
+"Last-Translator: Manoj Kumar Giri <mgiri@redhat.com>\n"
+"Language-Team: Oriya <oriya-it@googlegroups.com>\n"
+"Language: or\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"X-Generator: KBabel 1.11.4\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+
+#: lib/kaboutdata.cpp:306
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "ଏହି ପ୍ରଗ୍ରାମଟି %1 ର ନିୟମାନୁସାରେ ବଣ୍ଟାଯାଇଥାଏ।"
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License Version 2"
+
+#: lib/kaboutdata.cpp:356
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:360
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD ପ୍ରମାଣ ପତ୍ର"
+
+#: lib/kaboutdata.cpp:361
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD ପ୍ରମାଣ ପତ୍ର"
+
+#: lib/kaboutdata.cpp:364
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artistic ପ୍ରମାଣ ପତ୍ର"
+
+#: lib/kaboutdata.cpp:365
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artistic ପ୍ରମାଣ ପତ୍ର"
+
+#: lib/kaboutdata.cpp:368
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q ସାର୍ବଜନୀନ ପ୍ରମାଣ ପତ୍ର"
+
+#: lib/kaboutdata.cpp:372
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License Version 3"
+
+#: lib/kaboutdata.cpp:376
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License Version 3"
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:381
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:385
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "ଇଚ୍ଛାରୂପଣ"
+
+#: lib/kaboutdata.cpp:388
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "ଦର୍ଶାଯାଇନାହିଁ"
+
+#: lib/kaboutdata.cpp:937
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1165
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "ଲେଖକ ସୂଚନା ଦର୍ଶାନ୍ତୁ"
+
+#: lib/kaboutdata.cpp:1166
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "ଅନୁମତି ପତ୍ର ସୂଚନା ଦର୍ଶାନ୍ତୁ"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1178
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "ଏହି ପ୍ରୟୋଗଟି ଜଣକ ଦ୍ୱାରା ଲିଖିତ ଯିଏକି ଅଜ୍ଞାତ ହୋଇ ରହିବାକୁ ଚାହୁଁଅଛି।"
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 ଟି %2 ଦ୍ୱାରା \n"
+"ଲିଖିତ"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "ଦୟାକରି ତ୍ରୁଟି ପ୍ରକାଶ କରିବା ପାଇଁ http://bugs.kde.org କୁ ବ୍ୟବହାର କରନ୍ତୁ।\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "ଦୟାକରି %1 ରେ ତ୍ରୁଟି ପ୍ରକାଶ କରନ୍ତୁ।\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "ଲାଇବ୍ରେରୀ %1 KDE 4 ସୁସଙ୍ଗତ କାରଖାନା ପ୍ରଦାନ କରେନାହିଁ।"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "ପୂର୍ବାହ୍ନ"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "ଅପରାହ୍ନ"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "ପୂର୍ବାହ୍ନ"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "ଖା"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "May"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "ତିର"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "ସମ୍ପାଦନ କରନ୍ତୁ"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "ଦାଖଲ କରନ୍ତୁ"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "ପୂର୍ବାହ୍ନ"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MiB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GiB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TiB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, fuzzy, qt-format
+#| msgid "%1 KiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KiB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MiB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GiB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TiB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, fuzzy, qt-format
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 TiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, fuzzy, qt-format
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 ଦିନ"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, fuzzy, qt-format
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 ଘଣ୍ଟା"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 ମିନଟ"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, fuzzy, qt-format
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 ସେକଣ୍ଡ"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgid "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 ମିଲିସେକଣ୍ଡ"
+msgstr[1] "%1 ମିଲିସେକଣ୍ଡ"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 ଦିନ"
+msgstr[1] "%1 ଦିନ"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 ଘଣ୍ଟା"
+msgstr[1] "%1 ଘଣ୍ଟା"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 ମିନଟ"
+msgstr[1] "%1 ମିନଟ"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 ସେକଣ୍ଡ"
+msgstr[1] "%1 ସେକଣ୍ଡ"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 ଏବଂ %2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+#| msgctxt "@item Calendar system"
+#| msgid "Invalid Calendar Type"
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "ଅବୈଧ କାଲେଣ୍ଡର ଟାଇପ"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "ଆଜି"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "ଗତକାଲି"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "ଆସନ୍ତା ମାସ"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "ମଙ୍ଗଳବାର"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "ବୁଧବାର"
+
+#: lib/util/kformatprivate.cpp:535
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "ଗୁରୁବାର"
+
+#: lib/util/kformatprivate.cpp:537
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "ଶୁକ୍ରବାର"
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "ଶନିବାର"
+
+#: lib/util/kformatprivate.cpp:541
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "ରବିବାର"
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "ଆସନ୍ତା ମାସ"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "ମଙ୍ଗଳବାର"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "ବୁଧବାର"
+
+#: lib/util/kformatprivate.cpp:552
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "ଗୁରୁବାର"
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "ଶୁକ୍ରବାର"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "ଶନିବାର"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "ରବିବାର"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1 %2"
--- /dev/null
+# translation of kdelibs4.po to Punjabi
+# Punjabi translation of kdelibs.
+# Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, Inc.
+#
+# Amanpreet Singh Alam <amanlinux@netscape.net>, 2004.
+# Amanpreet Singh Alam <amanlinux@netscpe.net>, 2004.
+# A S Alam <aalam@users.sf.net>, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012.
+# ASB <aalam@users.sf.net>, 2007.
+# Amanpreet Singh Alam <apreet.alam@gmail.com>, 2008.
+# Amanpreet Singh <aalam@users.sf.net>, 2008.
+# Amanpreet Singh Alam <aalam@users.sf.net>, 2008, 2009, 2013, 2014.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2014-07-08 14:24-0500\n"
+"Last-Translator: A S Alam <aalam@users.sf.net>\n"
+"Language-Team: Punjabi/Panjabi <punjabi-users@lists.sf.net>\n"
+"Language: pa\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.5\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"ਇਸ ਪਰੋਗਰਾਮ ਲਈ ਕੋਈ ਲਾਈਸੈਂਸ ਸ਼ਰਤ ਨਹੀ ਦਿੱਤੀ ਗਈ ਹੈ।\n"
+"ਵਧੇਰੇ ਜਾਣਕਾਰੀ ਲਈ ਇਸ ਦੇ ਸਰੋਤ ਜਾਂ ਡੌਕੂਮੈਂਟ\n"
+"ਦੀ ਜਾਂਚ ਕਰੋ ਜੀ।\n"
+
+#: lib/kaboutdata.cpp:306
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "ਇਹ ਪਰੋਗਰਾਮ %1 ਦੀਆਂ ਸ਼ਰਤਾਂ ਅਧੀਨ ਜਾਰੀ ਕੀਤਾ ਗਿਆ ਹੈ।"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU ਜਰਨਲ ਪਬਲਿਕ ਲਾਈਸੈਂਸ ਵਰਜਨ 2"
+
+#: lib/kaboutdata.cpp:356
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU ਲੈਸਰ ਜਰਨਲ ਪਬਲਿਕ ਲਾਈਸੈਂਸ ਵਰਜਨ 2"
+
+#: lib/kaboutdata.cpp:360
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD ਲਾਈਸੈਂਸ"
+
+#: lib/kaboutdata.cpp:361
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD ਲਾਈਸੈਂਸ"
+
+#: lib/kaboutdata.cpp:364
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "ਆਰਟੈਸਟਿਕ ਲਾਈਸੈਂਸ"
+
+#: lib/kaboutdata.cpp:365
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "ਆਰਟੈਸਟਿਕ ਲਾਈਸੈਂਸ"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q ਪਬਲਿਕ ਲਾਈਸੈਂਸ"
+
+#: lib/kaboutdata.cpp:372
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU ਜਰਨਲ ਪਬਲਿਕ ਲਾਈਸੈਂਸ ਵਰਜਨ 3"
+
+#: lib/kaboutdata.cpp:376
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU ਲੈਸਰ ਜਰਨਲ ਪਬਲਿਕ ਲਾਈਸੈਂਸ ਵਰਜਨ 3"
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgctxt "KAboutLicense|@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:381
+#, fuzzy
+#| msgctxt "KAboutLicense|@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU ਲੈਸਰ ਜਰਨਲ ਪਬਲਿਕ ਲਾਈਸੈਂਸ ਵਰਜਨ 2"
+
+#: lib/kaboutdata.cpp:385
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "ਕਸਟਮ"
+
+#: lib/kaboutdata.cpp:388
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "ਦਿੱਤਾ ਨਹੀਂ"
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt ""
+#| "KAboutData|replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>ਓਪਨ ਸਰੋਤ ਸਾਫਟਵੇਅਰਾਂ, KDE ਦੇ ਪੰਜਾਬੀ ਵਿੱਚ ਅਨੁਵਾਦ</p><p> ਦਾ ਕੰਮ ਪੰਜਾਬੀ ਓਪਨ ਸੋਰਸ ਟੀਮ "
+"(P(unjabi) O(pen) S(ource) T(eam)) (ਮੋਗਾ) ਨੇ </p> <p>ਅਮਨਪਰੀਤ ਸਿੰਘ ਆਲਮਵਾਲਾ ਅਤੇ "
+"ਜਸਵਿੰਦਰ ਸਿੰਘ ਫੂਲੇਵਾਲਾ</p> <p>ਦੀ ਅਗਵਾਈ ਹੇਠ ਕੀਤਾ ਹੈ।</p><p>ਆਪਣੀ ਬੋਲੀ ਆਪਣੀ ਮਾਣ</"
+"p><p>ਵਧੇਰੇ ਜਾਣਕਾਰੀ ਲਈ <a href=\"https://code.google.com/p/gurmukhi/\">ਪਰੋਜੈਕਟ "
+"ਸਾਇਟ</a> ਵੇਖੋ।</p>"
+
+#: lib/kaboutdata.cpp:1165
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "ਲੇਖਕ ਜਾਣਕਾਰੀ ਵੇਖੋ"
+
+#: lib/kaboutdata.cpp:1166
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "ਲਾਈਸੈਂਸ ਜਾਣਕਾਰੀ ਵੇਖੋ"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1178
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "ਇਸ ਐਪਲੀਕੇਸ਼ਨ ਨੂੰ ਉਸਨੇ ਲਿਖਿਆ ਹੈ, ਜੋ ਕਿ ਬੇਪਛਾਣ ਰਹਿਣਾ ਚਾਹੁੰਦਾ ਹੈ।"
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "KAboutData CLI|"
+#| msgid "%s was written by:\n"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%s ਨੂੰ ਲਿਖਿਆ\n"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "ਬੱਗ ਦੀ ਜਾਣਕਾਰੀ ਦੇਣ ਲਈ http://bugs.kde.org ਵਰਤੋਂ।\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "ਬੱਗ ਦੀ ਜਾਣਕਾਰੀ ਦੇਣ ਲਈ %1 ਵਰਤੋਂ।\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "ਸਵੇਰੇ"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "ਸ਼ਾਮ"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "ਸਵੇਰੇ"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "ਖਾ"
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "ਸਵੇਰ"
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "ਮਈ"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "ਟੀਰ"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "ਸੋਧ"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "ਭੇਜੋ"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "ਸਵੇਰੇ"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2.%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h%2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2m%3.%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 ਦਿਨ"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 ਘੰਟੇ"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 ਮਿੰਟ"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 ਸਕਿੰਟ"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n millisecond(s)"
+#| msgid_plural "%n millisecond(s)"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n ਮਿਲੀ-ਸਕਿੰਟ"
+msgstr[1] "%n ਮਿਲੀ-ਸਕਿੰਟ"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n day(s)"
+#| msgid_plural "%n day(s)"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n ਦਿਨ"
+msgstr[1] "%n ਦਿਨ"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n hour(s)"
+#| msgid_plural "%n hour(s)"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n ਘੰਟੇ"
+msgstr[1] "%n ਘੰਟੇ"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n minute(s)"
+#| msgid_plural "%n minute(s)"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n ਮਿੰਟ"
+msgstr[1] "%n ਮਿੰਟ"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n second(s)"
+#| msgid_plural "%n second(s)"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n ਸਕਿੰਟ"
+msgstr[1] "%n ਸਕਿੰਟ"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 ਤੇ %2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+#| msgid "Invalid item."
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "ਗਲਤ ਆਈਟਮ।"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "ਭਲਕ"
+
+#: lib/util/kformatprivate.cpp:521
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "ਅੱਜ"
+
+#: lib/util/kformatprivate.cpp:523
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "ਕੱਲ੍ਹ"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+#| msgctxt "@option last month"
+#| msgid "Last Month"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "ਪਿਛਲੇ ਮਹੀਨੇ"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "ਮੰਗਲਵਾਰ"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "ਬੁੱਧਵਾਰ"
+
+#: lib/util/kformatprivate.cpp:535
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "ਵੀਰਵਾਰ"
+
+#: lib/util/kformatprivate.cpp:537
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "ਸ਼ੁੱਕਰਵਾਰ"
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "ਸ਼ਨਿੱਚਰਵਾਰ"
+
+#: lib/util/kformatprivate.cpp:541
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "ਐਤਵਾਰ"
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+#| msgctxt "@option next month"
+#| msgid "Next Month"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "ਅਗਲੇ ਮਹੀਨੇ"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "ਮੰਗਲਵਾਰ"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "ਬੁੱਧਵਾਰ"
+
+#: lib/util/kformatprivate.cpp:552
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "ਵੀਰਵਾਰ"
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "ਸ਼ੁੱਕਰਵਾਰ"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "ਸ਼ਨਿੱਚਰਵਾਰ"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "ਐਤਵਾਰ"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# translation of kdelibs4.po to Polish
+# translation of kdelibs4.po to
+# Version: $Revision: 685926 $
+# Ostatnie poprawki przed 2.0 Jacek Stolarczyk <jstolarz@kde.org>
+# Jacek Stolarczyk <jstolarz@kde.org>, 2001.
+# Piotr Roszatycki <dexter@debian.org>, 1997-2000.
+# Artur Górniak <artur_gorniak@software.pl>, 2000.
+# Michał Rudolf <mrudolf@kdewebdev.org>, 2002.
+# Michal Rudolf <mrudolf@kdewebdev.org>, 2002,2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010.
+# Krzysztof Lichota <lichota@mimuw.edu.pl>, 2005, 2006.
+# Marta Rybczyńska <kde-i18n@rybczynska.net>, 2007, 2008, 2009, 2010, 2011, 2012, 2013.
+# Michal Rudolf <michal@rudolf.waw.pl>, 2010.
+# Artur Chłond <eugenewolfe@o2.pl>, 2010.
+# Łukasz Wojniłowicz <lukasz.wojnilowicz@gmail.com>, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2018-12-24 05:53+0100\n"
+"Last-Translator: Łukasz Wojniłowicz <lukasz.wojnilowicz@gmail.com>\n"
+"Language-Team: Polish <kde-i18n-doc@kde.org>\n"
+"Language: pl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 2.0\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
+"|| n%100>=20) ? 1 : 2);\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Dla tego programu nie zostały określone warunki licencji.\n"
+"Proszę sprawdzić dokumentację lub źródła tego programu, aby\n"
+"znaleźć licencję.\n"
+
+#: lib/kaboutdata.cpp:306
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Program ten jest rozpowszechniany na warunkach licencji %1."
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License wersja 2"
+
+#: lib/kaboutdata.cpp:356
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU General Public License wersja 2"
+
+#: lib/kaboutdata.cpp:360
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Licencja BSD"
+
+#: lib/kaboutdata.cpp:361
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Licencja BSD"
+
+#: lib/kaboutdata.cpp:364
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Licencja Artistic"
+
+#: lib/kaboutdata.cpp:365
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Licencja Artistic"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public License"
+
+#: lib/kaboutdata.cpp:372
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License wersja 3"
+
+#: lib/kaboutdata.cpp:376
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License wersja 3"
+
+#: lib/kaboutdata.cpp:380
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:381
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Powszechna Licencja Publiczna w wersji 2.1"
+
+#: lib/kaboutdata.cpp:385
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Inna"
+
+#: lib/kaboutdata.cpp:388
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Nieokreślona"
+
+#: lib/kaboutdata.cpp:937
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE jest tłumaczone na polski w czasie wolnym ludzi, chcących ten czas "
+"poświecić.</p><p>Tłumaczenie może zawierać <b>błędy</b>. Jeśli znalazłaś/"
+"znalazłeś taki błąd, to powiadom nas o tym, wysyłając wiadomość na adres <a "
+"href=\"mailto:kdei18n-pl-uwagi@lists.sourceforge.net\"> kdei18n-pl-"
+"uwagi@lists.sourceforge.net</a> (wystarczy, że wyślesz wiadomość; nie musisz "
+"się nigdzie zapisywać).</p><p>Zapraszamy również do współudziału w "
+"tłumaczeniu! Aby się zgłosić wyślij wiadomość na adres <a href=\"mailto:"
+"kdei18n-pl-devel@lists.sourceforge.net\"> kdei18n-pl-devel@lists.sourceforge."
+"net</a>.</p>"
+
+#: lib/kaboutdata.cpp:1165
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Pokaż informacje o autorze."
+
+#: lib/kaboutdata.cpp:1166
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Pokaż informacje o licencji."
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Podstawa nazwy pliku elementu pulpitu dla tej aplikacji."
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "nazwa pliku"
+
+#: lib/kaboutdata.cpp:1178
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr ""
+"Ten program został napisany przez kogoś, kto chciał pozostać anonimowy."
+
+#: lib/kaboutdata.cpp:1180
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 został napisany przez:"
+
+#: lib/kaboutdata.cpp:1191
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Do zgłaszania błędów użyj https://bugs.kde.org."
+
+#: lib/kaboutdata.cpp:1193
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Błędy zgłaszaj na %1."
+
+#: lib/plugin/kpluginloader.cpp:122
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Biblioteka %1 nie zapewnia KPluginFactory"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "y"
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "z"
+
+#: lib/util/kformatprivate.cpp:118
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "a"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "f"
+
+#: lib/util/kformatprivate.cpp:120
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "p"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "µ"
+
+#: lib/util/kformatprivate.cpp:123
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "k"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Ki"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "M"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mi"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Gi"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "T"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ti"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pi"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "E"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ei"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "Z"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Zi"
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:140
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "bit"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B"
+
+#: lib/util/kformatprivate.cpp:146
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Hz"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2.%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h%2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2m%3.%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 dni"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 godzin"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minut"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 sekund"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n milisekunda"
+msgstr[1] "%n milisekundy"
+msgstr[2] "%n milisekund"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n dzień"
+msgstr[1] "%n dni"
+msgstr[2] "%n dni"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n godzina"
+msgstr[1] "%n godziny"
+msgstr[2] "%n godzin"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minuta"
+msgstr[1] "%n minuty"
+msgstr[2] "%n minut"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n sekunda"
+msgstr[1] "%n sekundy"
+msgstr[2] "%n sekund"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 i %2"
+
+#: lib/util/kformatprivate.cpp:509
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Nieprawidłowa data"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Jutro"
+
+#: lib/util/kformatprivate.cpp:521
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Dzisiaj"
+
+#: lib/util/kformatprivate.cpp:523
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Wczoraj"
+
+#: lib/util/kformatprivate.cpp:529
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Ostatni poniedziałek"
+
+#: lib/util/kformatprivate.cpp:531
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "Ostatni wtorek"
+
+#: lib/util/kformatprivate.cpp:533
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Ostatnia środa"
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "Ostatni czwartek"
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "Ostatni piątek"
+
+#: lib/util/kformatprivate.cpp:539
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "Ostatnia sobota"
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "Ostatnia niedziela"
+
+#: lib/util/kformatprivate.cpp:546
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Następny miesiąc"
+
+#: lib/util/kformatprivate.cpp:548
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Następny wtorek"
+
+#: lib/util/kformatprivate.cpp:550
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Następna środa"
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "Następny czwartek"
+
+#: lib/util/kformatprivate.cpp:554
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Następny piątek"
+
+#: lib/util/kformatprivate.cpp:556
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Następna sobota"
+
+#: lib/util/kformatprivate.cpp:558
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Następna niedziela"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the Kde package.
+# Zabeeh Khan <zabeehkhan@gmail.com>, 2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2008-08-16 16:01-0800\n"
+"Last-Translator: Zabeeh Khan <zabeehkhan@gmail.com>\n"
+"Language-Team: Pashto <pathanisation@googlegroups.com>\n"
+"Language: ps\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Poedit-Language: Pashto, Pushto\n"
+"X-Poedit-Country: AFGHANISTAN\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"دې کړنلار لپاره کوم منښتليک توکي نه دي ټاکل شوي.\n"
+"لورينه وکړﺉ د منښتليک توکو لپاره لاسوندونه يا\n"
+"سرچينه وګورﺉ.\n"
+
+#: lib/kaboutdata.cpp:306
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr ".د توکو له مخې وېشل کيږي %1 دا کړنلار د"
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "ج.پ.ل ۲مه نسخه"
+
+#: lib/kaboutdata.cpp:353
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "د ج.ن.ي ټولګړی منښتليک ۲مه نسخه"
+
+#: lib/kaboutdata.cpp:356
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "ل.ج.پ.ل ۲مه نسخه"
+
+#: lib/kaboutdata.cpp:357
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "د ج.ن.ي کوچنی ټولګړی منښتليک ۲مه نسخه"
+
+#: lib/kaboutdata.cpp:360
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "ب.س.ډ منښتليک"
+
+#: lib/kaboutdata.cpp:361
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "ب.س.ډ منښتليک"
+
+#: lib/kaboutdata.cpp:364
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "کلاکاريز منښتليک"
+
+#: lib/kaboutdata.cpp:365
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "کلاکاريز منښتليک"
+
+#: lib/kaboutdata.cpp:368
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "ک.پ.ل ۱.۰مه نسخه"
+
+#: lib/kaboutdata.cpp:369
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "ک ټولګړی منښتليک"
+
+#: lib/kaboutdata.cpp:372
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "ګ.پ.ل ۳مه نسخه"
+
+#: lib/kaboutdata.cpp:373
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "د ج.ن.ي ټولګړی منښتليک ۳مه نسخه"
+
+#: lib/kaboutdata.cpp:376
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "ل.ګ.پ.ل ۳مه نسخه"
+
+#: lib/kaboutdata.cpp:377
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "د ج.ن.ي کوچنی ټولګړی منښتليک ۳مه نسخه"
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "ل.ج.پ.ل ۲مه نسخه"
+
+#: lib/kaboutdata.cpp:381
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "د ج.ن.ي کوچنی ټولګړی منښتليک ۲مه نسخه"
+
+#: lib/kaboutdata.cpp:385
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "دوديز"
+
+#: lib/kaboutdata.cpp:388
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "نه دی ټاکل شوی"
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>کډي ډېرو ژبو ته ژباړل شوې ده. د ټولې نړۍ د ژباړه ډلو نه ډېره مننه.</"
+"p><p>د کډي د نړېوالونې په اړه د نورو خبرتياو لپاره وګورﺉ<a href=\"http://"
+"l10n.kde.org\">http://l10n.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1165
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "د ليکوال خبرتياوې ښودل"
+
+#: lib/kaboutdata.cpp:1166
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "د منښتليک خبرتياوې ښودل"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+#, fuzzy
+#| msgid "Filename Error"
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "د دوتنه نوم تېروتنه"
+
+#: lib/kaboutdata.cpp:1178
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "دا کاريال د يو داسې وګړي لخوا جوړ شوی چې خپل نوم ښودل نه غواړي."
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"ليکلی وو %1\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr ".وکاروﺉ http://bugs.kde.org لورينه وکړﺉ د کړاونو راپورولو لپاره\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr ".ته راپور کړﺉ %1 لورينه وکړﺉ کړاونه\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, fuzzy, qt-format
+#| msgid "The library does not export a factory for creating components."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "کتابون د رغتوکو جوړولو لپاره فېکټري نه بهروي."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "غ.م"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "غ.و"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "غ.م"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "پينځه نۍ"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "د می"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "تير"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "سمون"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "لېږل"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "غ.م"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "ب %1"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "ب %1"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "م ا ب %1"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "ج ا ب %1"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "ټ ا ب %1"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "ب %1"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "ب %1"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "ب %1"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "ب %1"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "ب %1"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, fuzzy, qt-format
+#| msgid "%1 KiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "ک ا ب %1"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "م ا ب %1"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "ج ا ب %1"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "ټ ا ب %1"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "ب %1"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "ب %1"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "ب %1"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "ب %1"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "ب %1"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, fuzzy, qt-format
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "ک ا ب %1"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "م ا ب %1"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "ج ا ب %1"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "ټ ا ب %1"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "ټ ا ب %1"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "ټ ا ب %1"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "ټ ا ب %1"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "ټ ا ب %1"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, fuzzy, qt-format
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "ورځې %1"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, fuzzy, qt-format
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "ګېنټې %1"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "مېنټه %1"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, fuzzy, qt-format
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "سېکېنډه %1"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgid "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "مېلېسېکېنډه %1"
+msgstr[1] "مېلېسېکېنډه %1"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "ورځې %1"
+msgstr[1] "ورځې %1"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "ګېنټې %1"
+msgstr[1] "ګېنټې %1"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "مېنټه %1"
+msgstr[1] "مېنټه %1"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "سېکېنډه %1"
+msgstr[1] "سېکېنډه %1"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%2 او %1"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "ناسم دوتنه نومونه"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "نن"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "پرون"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "راتلونکې مياشت"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "درې نۍ"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "منځنۍ"
+
+#: lib/util/kformatprivate.cpp:535
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "درې نۍ"
+
+#: lib/util/kformatprivate.cpp:537
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "جومه"
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "نۍ"
+
+#: lib/util/kformatprivate.cpp:541
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "يوه نۍ"
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "راتلونکې مياشت"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "درې نۍ"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "منځنۍ"
+
+#: lib/util/kformatprivate.cpp:552
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "درې نۍ"
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "جومه"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "نۍ"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "يوه نۍ"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1 %2"
--- /dev/null
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2018-12-07 08:39+0000\n"
+"Last-Translator: José Nuno Pires <zepires@gmail.com>\n"
+"Language-Team: pt <kde-i18n-pt@kde.org>\n"
+"Language: pt\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POFile-IgnoreConsistency: &Discard\n"
+"X-POFile-IgnoreConsistency: Enter\n"
+"X-POFile-IgnoreConsistency: Author\n"
+"X-POFile-IgnoreConsistency: Open &File\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-POFile-Allow: 2\n"
+"X-POFile-IgnoreConsistency: Far\n"
+"X-POFile-SpellExtra: Hspell Koenig KHTML Thaana Telugu KScript Sycoca\n"
+"X-POFile-SpellExtra: artsmessage KDEInit SOCKS kcmkresources\n"
+"X-POFile-SpellExtra: ChavePrivadaFalhou KIOTest Han Thaani Jumaada Hangul\n"
+"X-POFile-SpellExtra: Cherokee Meh KSpell chaveSessao TestWritevCard\n"
+"X-POFile-SpellExtra: Thulatha Javascript Tagbanwa End Tagalog LTR Oriya\n"
+"X-POFile-IgnoreConsistency: H:\n"
+"X-POFile-IgnoreConsistency: Untrusted\n"
+"X-POFile-IgnoreConsistency: Export\n"
+"X-POFile-SpellExtra: Hiragana Backspace Print PgUp Ins\n"
+"X-POFile-SpellExtra: ModificadoresEspaço Yi Lao Return gpg Caps Lock kab\n"
+"X-POFile-SpellExtra: aRts tags Buhid Insert Gurmukhi Malayalam Scroll\n"
+"X-POFile-SpellExtra: Delete Ogham PgDn Kannada Tab Home Katakana SysReq\n"
+"X-POFile-SpellExtra: KConvertTest Khmer OutraOpção Bopomofo\n"
+"X-POFile-SpellExtra: MarcasCombinatórias Enter UmaOpção Devanagari\n"
+"X-POFile-SpellExtra: Hanunoo Sinhala JanelaAutoExemplo Lars Ian help\n"
+"X-POFile-IgnoreConsistency: Try Different\n"
+"X-POFile-IgnoreConsistency: Delete\n"
+"X-POFile-IgnoreConsistency: Comment\n"
+"X-POFile-IgnoreConsistency: &Restore\n"
+"X-POFile-IgnoreConsistency: Reset\n"
+"X-POFile-IgnoreConsistency: 0.1\n"
+"X-POFile-IgnoreConsistency: Forward\n"
+"X-POFile-SpellExtra: Kanbun CTRL Klash Syloti JS Jan TETest QObject\n"
+"X-POFile-SpellExtra: Sebastian Geiser Far kdeinit Weis Mordad Yau Hausmann\n"
+"X-POFile-SpellExtra: execprefix autostart Dirk Nov Elul shanbe Farvardin\n"
+"X-POFile-SpellExtra: KApplication bin tagcloudtest displayname IFrame yo\n"
+"X-POFile-SpellExtra: Aza Adar Sáb dah XIM Sha Sonnet testregression Jamo\n"
+"X-POFile-SpellExtra: Shawwal Bah KConf IPA Hijri Sab Testkhtml Jeroen\n"
+"X-POFile-SpellExtra: QWidget dumps KJSEmbed Arb qttest stderr Kho ban Kha\n"
+"X-POFile-SpellExtra: PathLengthExceeded Tai shn Ago KrossTest Ithnain\n"
+"X-POFile-SpellExtra: klauncher tempfile Aban frame ThreadWeaver Kun yeyo\n"
+"X-POFile-SpellExtra: Buginese Lue Kislev Khamees home Jumma XDG Khordad\n"
+"X-POFile-SpellExtra: Zemberek KAboutData Wijnhout Sivan Saami Method Qua\n"
+"X-POFile-SpellExtra: Molkentin PTY Koivisto onthespot Ord Shvat Jom\n"
+"X-POFile-SpellExtra: KMultiPart Ahad CJK Aspell Tifinagh NoCARoot Tishrey\n"
+"X-POFile-SpellExtra: Up KDXSView ModRunner subtexto aifamily Panj path\n"
+"X-POFile-SpellExtra: NumLock keramik GHNS TestRegressionGui Yek Iyar Ahd\n"
+"X-POFile-SpellExtra: khtmltests Torben QApplication overthespot caption\n"
+"X-POFile-SpellExtra: khtml desktop Ispell QWS create Faure Object Limbu\n"
+"X-POFile-SpellExtra: KLauncher Sauer Hijjah Myanmar NEC BCC Fev Kelly\n"
+"X-POFile-SpellExtra: Jumee Stephan TestRegression Knoll frames HOME Jum\n"
+"X-POFile-SpellExtra: DISPLAY KNewStuff Awal Rajab pt plastik InvalidHost\n"
+"X-POFile-SpellExtra: kdemain STDOUT Jun Jul Kulow Yaum pa Chahar widgets\n"
+"X-POFile-SpellExtra: man KUnitTest pm KDEPIM TAB Waldo CL CC Balinês\n"
+"X-POFile-SpellExtra: Nagri Kangxi QLayout qtplugininstance regression\n"
+"X-POFile-SpellExtra: multipart Jalali Phags Set servname nograb\n"
+"X-POFile-SpellExtra: International Frame CGIs Stylesheet Library Sex Seg\n"
+"X-POFile-SpellExtra: KDontChangeTheHostName SO toner Yijing Peter Out\n"
+"X-POFile-SpellExtra: InvalidCA Le Khmeres Tevet Ordibehesht Anton am al\n"
+"X-POFile-SpellExtra: Tir Tuebingen Esf Abr ini KLocale KiB WMNET Dingbats\n"
+"X-POFile-SpellExtra: InvalidPurpose kdehelp id Glagolitic factory Esfand\n"
+"X-POFile-SpellExtra: Nisan kjs ErrorReadingRoot MiB Copta Shanbe Xvfb\n"
+"X-POFile-SpellExtra: client Mai Bastian document config TiB Jones AC\n"
+"X-POFile-SpellExtra: KBuildSycoca Bahman offthespot Mueller Tang ye Thu\n"
+"X-POFile-SpellExtra: Sabt NKo aisocktype mixed Carriage Thl aiflags\n"
+"X-POFile-SpellExtra: Muharram Reinhart Kontact Cantonês Page icon\n"
+"X-POFile-SpellExtra: makekdewidgets ManyColor Heshvan Kross Ith bind Antti\n"
+"X-POFile-SpellExtra: DXS Tamuz Shahrivar sessionId sh KJSCmd Av KLibLoader\n"
+"X-POFile-SpellExtra: Mehr GiB Arbi dograb AssinaturaFalhou prefix\n"
+"X-POFile-SpellExtra: Hexagramas ize AutoAssinado NãoConfiável Qi Down\n"
+"X-POFile-SpellExtra: directory Índicas ise Oxygen info shared share usr\n"
+"X-POFile-IgnoreConsistency: Separate Folders\n"
+"X-POFile-SpellExtra: XDGDATADIRS KTTS Control PrtScr Hyper Sys Win Screen\n"
+"X-POFile-SpellExtra: Req Break AltGr ReadOnly SHM EOF Re abc ABC QPL Kate\n"
+"X-POFile-SpellExtra: Serif Sans KFormula URIs raster opengl favicons Solid\n"
+"X-POFile-SpellExtra: Harald Fernengel KTTSD baseline Resource writeall\n"
+"X-POFile-SpellExtra: Trüg YiB PiB YB ZB EB PB EiB ZiB GB TB KIdleTest\n"
+"X-POFile-SpellExtra: Freddi KIdleTime Cha Āshwin Budhavãra Suk Paush\n"
+"X-POFile-SpellExtra: Shrāvana Somavãra Phālgun Raviãra Phā Māg\n"
+"X-POFile-SpellExtra: Bhādrapad Chaitra Māgh Sukravãra Āshādha\n"
+"X-POFile-SpellExtra: Agrahayana Bud Shr Guruvãra Mañ Gur Vaishākh Jya\n"
+"X-POFile-SpellExtra: Kārtik Agr Jyaishtha Kār Āsh Bhā Rav milisegundo\n"
+"X-POFile-SpellExtra: Āsw Mañgalvã Sanivãra Mayek Ol Saurashtra\n"
+"X-POFile-SpellExtra: Sundanês Viet Lisu Kayah Chiki Lepcha Meetei Cham\n"
+"X-POFile-SpellExtra: Rejang Tham Bamum Pshoment Pas Ptiou Neh Genbot Hamus\n"
+"X-POFile-SpellExtra: Pag Paope Pesnau Pes Hed Magabit Ehu Tahsas Yak Mag\n"
+"X-POFile-SpellExtra: Tob Pef Kou Pam Pao Tequemt Paremhotep Psh nabot\n"
+"X-POFile-SpellExtra: Hathor Pso Kiahk Hat Meo Psa Sene Psabbaton Miy\n"
+"X-POFile-SpellExtra: Pashons Mes LarguraxAltura Kia Qedame Ham Gen Hedar\n"
+"X-POFile-SpellExtra: Parmoute Teq Mesore Nehase Kouji Yakatit Maksegno\n"
+"X-POFile-SpellExtra: Paone Sen Meshir Pagumen Thoout Hamle Epe Mak\n"
+"X-POFile-SpellExtra: Tkyriakē Ehud Tho Qed Pti Psoou Segno Tah Rob\n"
+"X-POFile-SpellExtra: Miyazya Meskerem Tobe Peftoou Epep Tky pastabase Fã\n"
+"X-POFile-SpellExtra: KVTML USD Colaborativos Hunspell Jovie AM PM mails\n"
+"X-POFile-SpellExtra: mbuttonGroup Blog blog np cp nc UTC Mandaico Batak\n"
+"X-POFile-SpellExtra: DQTDECLARATIVEDEBUG QML slot pedro mantê Pocinhas\n"
+"X-POFile-SpellExtra: Reconstrói ii Del iii querê KPluginFactory Ki Ei Zi\n"
+"X-POFile-IgnoreConsistency: Update\n"
+"X-Qt-Contexts: true\n"
+"X-POFile-SpellExtra: Gi\n"
+
+#: lib/kaboutdata.cpp:296
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Os termos da licença deste programa não foram indicados.\n"
+"Por favor consulte a documentação ou o código-fonte para mais\n"
+"informações acerca da licença.\n"
+
+#: lib/kaboutdata.cpp:306
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Este programa é distribuído nos termos da licença %1."
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "Licença Pública da GNU Versão 2"
+
+#: lib/kaboutdata.cpp:356
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "Licença Pública da GNU Lata Versão 2"
+
+#: lib/kaboutdata.cpp:360
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Licença BSD"
+
+#: lib/kaboutdata.cpp:361
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Licença BSD"
+
+#: lib/kaboutdata.cpp:364
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Licença Artística"
+
+#: lib/kaboutdata.cpp:365
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Licença Artística"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Licença Pública Q"
+
+#: lib/kaboutdata.cpp:372
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "Licença Pública da GNU Versão 3"
+
+#: lib/kaboutdata.cpp:376
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "Licença Pública Lata da GNU Versão 3"
+
+#: lib/kaboutdata.cpp:380
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:381
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "Licença Pública da GNU Lata Versão 2.1"
+
+#: lib/kaboutdata.cpp:385
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Personalizada"
+
+#: lib/kaboutdata.cpp:388
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Não indicada"
+
+#: lib/kaboutdata.cpp:937
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>O KDE está traduzido em várias línguas, graças ao trabalho das várias "
+"equipas de traduções por todo o mundo.</p><p>Para mais informações acerca da "
+"equipa de localização do KDE para Português visite <a href=\"http://kde-pt."
+"dyndns.org/\">http://kde-pt.dyndns.org/</a></p>"
+
+#: lib/kaboutdata.cpp:1165
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Mostra informações sobre o autor."
+
+#: lib/kaboutdata.cpp:1166
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Mostra informações sobre a licença."
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "O nome de base dos ficheiros do item 'desktop' para esta aplicação."
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "nome do ficheiro"
+
+#: lib/kaboutdata.cpp:1178
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Esta aplicação foi escrita por alguém que quer continuar anónimo."
+
+#: lib/kaboutdata.cpp:1180
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "O %1 foi escrito por:"
+
+#: lib/kaboutdata.cpp:1191
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Use por favor o https://bugs.kde.org para comunicar erros."
+
+#: lib/kaboutdata.cpp:1193
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Por favor, comunique os erros para %1."
+
+#: lib/plugin/kpluginloader.cpp:122
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "A biblioteca %1 não possui um KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "y"
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "z"
+
+#: lib/util/kformatprivate.cpp:118
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "a"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "f"
+
+#: lib/util/kformatprivate.cpp:120
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "p"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "µ"
+
+#: lib/util/kformatprivate.cpp:123
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "k"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Ki"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "M"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mi"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Gi"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "T"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ti"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pi"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "E"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ei"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "Z"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Zi"
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:140
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "bit"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B"
+
+#: lib/util/kformatprivate.cpp:146
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Hz"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2,%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h%2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2m%3,%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2,%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3,%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 dias"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 horas"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minutos"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 segundos"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n milisegundo"
+msgstr[1] "%n milisegundos"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n dia"
+msgstr[1] "%n dias"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n hora"
+msgstr[1] "%n horas"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minuto"
+msgstr[1] "%n minutos"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n segundo"
+msgstr[1] "%n segundos"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 e %2"
+
+#: lib/util/kformatprivate.cpp:509
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Data inválida"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Amanhã"
+
+#: lib/util/kformatprivate.cpp:521
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Hoje"
+
+#: lib/util/kformatprivate.cpp:523
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Ontem"
+
+#: lib/util/kformatprivate.cpp:529
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Segunda-Feira Passada"
+
+#: lib/util/kformatprivate.cpp:531
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "Terça-Feira Passada"
+
+#: lib/util/kformatprivate.cpp:533
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Quarta-Feira Passada"
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "Quinta-Feira Passada"
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "Sexta-Feira Passada"
+
+#: lib/util/kformatprivate.cpp:539
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "Sábado Passado"
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "Domingo Passado"
+
+#: lib/util/kformatprivate.cpp:546
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Próxima Segunda-Feira"
+
+#: lib/util/kformatprivate.cpp:548
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Próxima Terça-Feira"
+
+#: lib/util/kformatprivate.cpp:550
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Próxima Quarta-Feira"
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "Próxima Quinta-Feira"
+
+#: lib/util/kformatprivate.cpp:554
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Próxima Sexta-Feira"
+
+#: lib/util/kformatprivate.cpp:556
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Próximo Sábado"
+
+#: lib/util/kformatprivate.cpp:558
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Próximo Domingo"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# Translation of kcoreaddons5_qt.po to Brazilian Portuguese
+# Copyright (C) 2002-2016 This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Lisiane Sztoltz <lisiane@conectiva.com.br>, 2002, 2003, 2004.
+# Lisiane Sztoltz Teixeira <lisiane@kdemail.net>, 2003, 2004, 2005.
+# Henrique Pinto <stampede@coltec.ufmg.br>, 2003.
+# Marcus Gama <marcus.gama@gmail.com>, 2006.
+# Diniz Bortolotto <diniz.bortolotto@gmail.com>, 2007, 2008.
+# André Marcelo Alvarenga <alvarenga@kde.org>, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016.
+# Luiz Fernando Ranghetti <elchevive@opensuse.org>, 2008, 2009, 2010, 2012, 2016, 2017, 2018.
+# Fernando Boaglio <boaglio@kde.org>, 2009.
+# Doutor Zero <doutor.zero@gmail.com>, 2007, 2009.
+# Marcus Vinícius de Andrade Gama <marcus.gama@gmail.com>, 2010, 2012.
+# Aracele Torres <araceletorres@gmail.com>, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: kcoreaddons5_qt\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2018-12-11 10:19-0200\n"
+"Last-Translator: Luiz Fernando Ranghetti <elchevive@opensuse.org>\n"
+"Language-Team: Portuguese <kde-i18n-pt_BR@kde.org>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"X-Generator: Lokalize 2.0\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Nenhum termo de licença foi indicado para este programa.\n"
+"Por favor, verifique a documentação ou o código-fonte para\n"
+"mais informações sobre a licença.\n"
+
+#: lib/kaboutdata.cpp:306
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Este programa é distribuído sob os termos da %1."
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "Licença Pública Geral GNU versão 2"
+
+#: lib/kaboutdata.cpp:356
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "Licença Pública Menos Geral GNU versão 2"
+
+#: lib/kaboutdata.cpp:360
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Licença BSD"
+
+#: lib/kaboutdata.cpp:361
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Licença BSD"
+
+#: lib/kaboutdata.cpp:364
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Licença Artística"
+
+#: lib/kaboutdata.cpp:365
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Licença Artística"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Licença pública Q"
+
+#: lib/kaboutdata.cpp:372
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "Licença Pública Geral GNU versão 3"
+
+#: lib/kaboutdata.cpp:376
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "Licença Pública Menos Geral GNU versão 3"
+
+#: lib/kaboutdata.cpp:380
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:381
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "Licença Pública Menos Geral GNU versão 2.1"
+
+#: lib/kaboutdata.cpp:385
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Personalizada"
+
+#: lib/kaboutdata.cpp:388
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Não especificada"
+
+#: lib/kaboutdata.cpp:937
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>O KDE é traduzido para muitos idiomas, graças ao trabalho das equipes de "
+"tradução do mundo inteiro.</p><p>Para mais informações sobre a "
+"internacionalização do KDE, visite <a href=\"https://l10n.kde.org\">https://"
+"l10n.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1165
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Mostra informações sobre o autor."
+
+#: lib/kaboutdata.cpp:1166
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Mostra informações sobre a licença."
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "O nome de base dos arquivos do item 'desktop' para este aplicativo."
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "nome do arquivo"
+
+#: lib/kaboutdata.cpp:1178
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Este aplicativo foi escrito por alguém que quer permanecer anônimo."
+
+#: lib/kaboutdata.cpp:1180
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 foi escrito por:"
+
+#: lib/kaboutdata.cpp:1191
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Use a página https://bugs.kde.org para relatar erros."
+
+#: lib/kaboutdata.cpp:1193
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Por favor, relate os erros em %1."
+
+#: lib/plugin/kpluginloader.cpp:122
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "A biblioteca %1 não oferece um KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "y"
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "z"
+
+#: lib/util/kformatprivate.cpp:118
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "a"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "f"
+
+#: lib/util/kformatprivate.cpp:120
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "p"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "µ"
+
+#: lib/util/kformatprivate.cpp:123
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "k"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Ki"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "M"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mi"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Gi"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "T"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ti"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pi"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "E"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ei"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "Z"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Zi"
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:140
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "bit"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B"
+
+#: lib/util/kformatprivate.cpp:146
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Hz"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1min%2.%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1min%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h%2min"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2min%3.%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h%2min%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 dias"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 horas"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minutos"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 segundos"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n milissegundo"
+msgstr[1] "%n milissegundos"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n dia"
+msgstr[1] "%n dias"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n hora"
+msgstr[1] "%n horas"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minuto"
+msgstr[1] "%n minutos"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n segundo"
+msgstr[1] "%n segundos"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 e %2"
+
+#: lib/util/kformatprivate.cpp:509
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Data inválida"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Amanhã"
+
+#: lib/util/kformatprivate.cpp:521
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Hoje"
+
+#: lib/util/kformatprivate.cpp:523
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Ontem"
+
+#: lib/util/kformatprivate.cpp:529
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Última segunda-feira"
+
+#: lib/util/kformatprivate.cpp:531
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "Última terça-feira"
+
+#: lib/util/kformatprivate.cpp:533
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Última quarta-feira"
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "Última quinta-feira"
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "Última sexta-feira"
+
+#: lib/util/kformatprivate.cpp:539
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "Último sábado"
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "Último domingo"
+
+#: lib/util/kformatprivate.cpp:546
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Próxima segunda-feira"
+
+#: lib/util/kformatprivate.cpp:548
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Próxima terça-feira"
+
+#: lib/util/kformatprivate.cpp:550
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Próxima quarta-feira"
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "Próxima quinta-feira"
+
+#: lib/util/kformatprivate.cpp:554
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Próxima sexta-feira"
+
+#: lib/util/kformatprivate.cpp:556
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Próximo sábado"
+
+#: lib/util/kformatprivate.cpp:558
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Próximo domingo"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# Traducerea kdelibs4.po în Română
+# Laurenţiu Buzdugan <lbuz@rolix.org>, 2008, 2009.
+# Sergiu Bivol <sergiu@ase.md>, 2008, 2009, 2010.
+# Sergiu Bivol <sergiu@ase.md>, 2010, 2012, 2013, 2014.
+# Cristian Oneț <onet.cristian@gmail.com>, 2010, 2011, 2012, 2013.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2014-03-26 19:20+0200\n"
+"Last-Translator: Sergiu Bivol <sergiu@ase.md>\n"
+"Language-Team: Romanian <kde-i18n-ro@kde.org>\n"
+"Language: ro\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.5\n"
+"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
+"20)) ? 1 : 2;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Nu au fost specificați termeni de licențiere pentru\n"
+"acest program. Verificați dacă există asemenea\n"
+"specificări în documentație sau în codul sursă.\n"
+
+#: lib/kaboutdata.cpp:306
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Acest program este distribuit sub termenii %1."
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "Licența Publică Generală GNU versiunea 2"
+
+#: lib/kaboutdata.cpp:356
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "Licența „GNU Lesser General Public License Version 2”"
+
+#: lib/kaboutdata.cpp:360
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Licența BSD"
+
+#: lib/kaboutdata.cpp:361
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Licența BSD"
+
+#: lib/kaboutdata.cpp:364
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Licența Artistică"
+
+#: lib/kaboutdata.cpp:365
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Licența Artistică"
+
+#: lib/kaboutdata.cpp:368
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Licența Publică Q"
+
+#: lib/kaboutdata.cpp:372
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "Licența Publică Generală GNU versiunea 3"
+
+#: lib/kaboutdata.cpp:376
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "Licența „GNU Lesser General Public License Version 3”"
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:381
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "Licența „GNU Lesser General Public License Version 2”"
+
+#: lib/kaboutdata.cpp:385
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Personalizată"
+
+#: lib/kaboutdata.cpp:388
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Nespecificată"
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE a fost tradus în foarte multe limbi. Datorită eforturilor echipei de "
+"traducători români, aveți posibilitatea să vă bucurați de un mediu grafic în "
+"limba română. Pentru mai multe informații vă rugăm să vizitați <a href="
+"\"http://www.ro.kde.org/\">http://www.ro.kde.org/</a>.</p>"
+
+#: lib/kaboutdata.cpp:1165
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Afișează informații despre autor"
+
+#: lib/kaboutdata.cpp:1166
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Afișează informații despre licență"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+#, fuzzy
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "Eroare de fișier"
+
+#: lib/kaboutdata.cpp:1178
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Acestă aplicație a fost scris de cineva care vrea să rămână anonim."
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 a fost scris de\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Utilizați http://bugs.kde.org pentru a raporta erori.\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Trimite rapoarte despre erori la %1.\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Biblioteca %1 nu oferă o fabrică compatibilă cu KDE 4."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "pm"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Kha"
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "AM"
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mai"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tir"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Editare"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Trimite"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 O"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kO"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MO"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GO"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TO"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PO"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EO"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZO"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YO"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 O"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, fuzzy, qt-format
+#| msgctxt "memory size in 1024 bytes"
+#| msgid "%1 KB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KO"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MO"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GO"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TO"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PO"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EO"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZO"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YO"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 O"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, fuzzy, qt-format
+#| msgctxt "size in 1024 bytes"
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiO"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, fuzzy, qt-format
+#| msgctxt "size in 2^20 bytes"
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiO"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, fuzzy, qt-format
+#| msgctxt "size in 2^30 bytes"
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiO"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiO"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, fuzzy, qt-format
+#| msgctxt "size in 2^50 bytes"
+#| msgid "%1 PiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiO"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, fuzzy, qt-format
+#| msgctxt "size in 2^60 bytes"
+#| msgid "%1 EiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiO"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, fuzzy, qt-format
+#| msgctxt "size in 2^70 bytes"
+#| msgid "%1 ZiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiO"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, fuzzy, qt-format
+#| msgctxt "size in 2^80 bytes"
+#| msgid "%1 YiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiO"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 zile"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 ore"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minute"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 secunde"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 milisecundă"
+msgstr[1] "%1 milisecundă"
+msgstr[2] "%1 milisecundă"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 zile"
+msgstr[1] "%1 zile"
+msgstr[2] "%1 zile"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 ore"
+msgstr[1] "%1 ore"
+msgstr[2] "%1 ore"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 minute"
+msgstr[1] "%1 minute"
+msgstr[2] "%1 minute"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 secunde"
+msgstr[1] "%1 secunde"
+msgstr[2] "%1 secunde"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 și %2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+#| msgid "Invalid item."
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Element nevalid."
+
+#: lib/util/kformatprivate.cpp:519
+#, fuzzy
+#| msgctxt "@option tomorrow"
+#| msgid "Tomorrow"
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Mâine"
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Azi"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Ieri"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+#| msgctxt "@option last month"
+#| msgid "Last Month"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Luna trecută"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "Marți"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Miercuri"
+
+#: lib/util/kformatprivate.cpp:535
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "Joi"
+
+#: lib/util/kformatprivate.cpp:537
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "Vineri"
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "Sâmbătă"
+
+#: lib/util/kformatprivate.cpp:541
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "Duminică"
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+#| msgctxt "@option next month"
+#| msgid "Next Month"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Luna viitoare"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Marți"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Miercuri"
+
+#: lib/util/kformatprivate.cpp:552
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "Joi"
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Vineri"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Sâmbătă"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Duminică"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, fuzzy, qt-format
+#| msgctxt "City, Country"
+#| msgid "%1, %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# KDE - kdelibs/kdelibs4.po Russian translation.
+# Copyright (C) 2005, KDE Russian translation team.
+#
+# Denis Perchine <dyp@perchine.com>, 2000.
+# Gregory Mokhin <mok@kde.ru>, 2000, 2004, 2005.
+# Albert R. Valiev <darkstar@altlinux.ru>, 2002, 2008.
+# Leonid Kanter <leon@asplinux.ru>, 2002-2004, 2005, 2008.
+# Andrey Cherepanov <skull@kde.ru>, 2005-2007, 2008, 2009, 2011.
+# Nick Shaforostoff <shaforostoff@kde.ru>, 2004, 2006, 2007, 2008, 2009.
+# Nick Shaforostoff <shafff@ukr.net>, 2009.
+# Alexander Potashev <aspotashev@gmail.com>, 2009, 2010, 2011, 2014, 2015, 2016, 2017, 2018.
+# Yury G. Kudryashov <urkud.urkud@gmail.com>, 2011.
+# Yuri Efremov <yur.arh@gmail.com>, 2012.
+# Inga Barinova <ingabarinova@gmail.com>, 2012.
+# Julia Dronova <juliette.tux@gmail.com>, 2012.
+# Alexander Lakhin <exclusion@gmail.com>, 2013.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2018-12-10 13:02+0300\n"
+"Last-Translator: Alexander Potashev <aspotashev@gmail.com>\n"
+"Language-Team: Russian <kde-russian@lists.kde.ru>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 2.0\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Environment: kde\n"
+"X-Accelerator-Marker: &\n"
+"X-Text-Markup: kde4\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Лицензия в данной программе не указана.\n"
+"Возможно, она указана в документации или в исходных текстах этой программы.\n"
+
+#: lib/kaboutdata.cpp:306
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Программа распространяется на условиях %1."
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License, версия 2"
+
+#: lib/kaboutdata.cpp:356
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License, версия 2"
+
+#: lib/kaboutdata.cpp:360
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Лицензия BSD"
+
+#: lib/kaboutdata.cpp:361
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Лицензия BSD"
+
+#: lib/kaboutdata.cpp:364
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artistic License"
+
+#: lib/kaboutdata.cpp:365
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artistic License"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public License"
+
+#: lib/kaboutdata.cpp:372
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License, версия 3"
+
+#: lib/kaboutdata.cpp:376
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License, версия 3"
+
+#: lib/kaboutdata.cpp:380
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:381
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License, версия 2.1"
+
+#: lib/kaboutdata.cpp:385
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Другая лицензия"
+
+#: lib/kaboutdata.cpp:388
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Лицензия не указана"
+
+# BUGME: keep this up to date --aspotashev
+#: lib/kaboutdata.cpp:937
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>Графическая среда KDE переведена на многие языки благодаря работе команд "
+"переводчиков в разных странах.</p><p>Для дополнительной информации о "
+"переводе KDE зайдите на <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a>, а также на <a href=\"http://kde.ru\">http://kde.ru</a>. Там вы "
+"сможете узнать о работе команды, переводившей KDE на русский язык, и, "
+"возможно, сами захотите участвовать в этой работе.</p>"
+
+#: lib/kaboutdata.cpp:1165
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Показать сведения об авторе"
+
+#: lib/kaboutdata.cpp:1166
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Показать сведения о лицензии"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Имя файла .desktop (без пути) для этого приложения."
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "имя файла"
+
+#: lib/kaboutdata.cpp:1178
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Автор программы пожелал остаться неизвестным."
+
+#: lib/kaboutdata.cpp:1180
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 написали:"
+
+#: lib/kaboutdata.cpp:1191
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Используйте https://bugs.kde.org для отправки сообщений об ошибках."
+
+#: lib/kaboutdata.cpp:1193
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Используйте %1 для отправки сообщений об ошибках."
+
+#: lib/plugin/kpluginloader.cpp:122
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr ""
+"Библиотека %1 не предоставляет механизма создания компонентов KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "и"
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "з"
+
+#: lib/util/kformatprivate.cpp:118
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "а"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "ф"
+
+#: lib/util/kformatprivate.cpp:120
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "п"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "н"
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "мк"
+
+#: lib/util/kformatprivate.cpp:123
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "м"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "к"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Ки"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "М"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Ми"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "Г"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Ги"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "Т"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ти"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "П"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Пи"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "Э"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Эи"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "З"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Зи"
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "И"
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Ии"
+
+#: lib/util/kformatprivate.cpp:140
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "бит"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "Б"
+
+#: lib/util/kformatprivate.cpp:146
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "м"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Гц"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 Б"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 КБ"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 МБ"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 ГБ"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 ТБ"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 ПБ"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 ЭБ"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ЗБ"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 ЙБ"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 Б"
+
+# BUGME: "КБ" or "КиБ" here? --aspotashev
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 КиБ"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 МиБ"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 ГиБ"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 ТиБ"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 ПиБ"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 ЭиБ"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ЗиБ"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 ЙиБ"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 Б"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 КиБ"
+
+# BUGME: something is wrong in the comment extracted from source code: it says 10^20 while it should 2^20 --aspotashev
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 МиБ"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 ГиБ"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 ТиБ"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 ПиБ"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 ЭиБ"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ЗиБ"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 ЙиБ"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1м%2,%3с"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1м%2с"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1ч%2м"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1ч%2м%3,%4с"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1ч%2м%3с"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2,%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3,%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 дня"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 часа"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 минуты"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 секунды"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n миллисекунда"
+msgstr[1] "%n миллисекунды"
+msgstr[2] "%n миллисекунд"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n день"
+msgstr[1] "%n дня"
+msgstr[2] "%n дней"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n час"
+msgstr[1] "%n часа"
+msgstr[2] "%n часов"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n минута"
+msgstr[1] "%n минуты"
+msgstr[2] "%n минут"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n секунда"
+msgstr[1] "%n секунды"
+msgstr[2] "%n секунд"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 %2"
+
+#: lib/util/kformatprivate.cpp:509
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Недопустимая дата"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Завтра"
+
+#: lib/util/kformatprivate.cpp:521
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Сегодня"
+
+#: lib/util/kformatprivate.cpp:523
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Вчера"
+
+#: lib/util/kformatprivate.cpp:529
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Прошедший понедельник"
+
+#: lib/util/kformatprivate.cpp:531
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "Прошедший вторник"
+
+#: lib/util/kformatprivate.cpp:533
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Прошедшая среда"
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "Прошедший четверг"
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "Прошедшая пятница"
+
+#: lib/util/kformatprivate.cpp:539
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "Прошедшая суббота"
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "Прошедшее воскресенье"
+
+#: lib/util/kformatprivate.cpp:546
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Ближайший понедельник"
+
+#: lib/util/kformatprivate.cpp:548
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Ближайший вторник"
+
+#: lib/util/kformatprivate.cpp:550
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Ближайшая среда"
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "Ближайший четверг"
+
+#: lib/util/kformatprivate.cpp:554
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Ближайшая пятница"
+
+#: lib/util/kformatprivate.cpp:556
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Ближайшая суббота"
+
+#: lib/util/kformatprivate.cpp:558
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Ближайшее воскресенье"
+
+# BUGME: translate as "%1 в %2"? Need testing. --aspotashev
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# Translation of kcoreaddons5_qt to Northern Sami
+#
+# Børre Gaup <boerre@skolelinux.no>, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-02-28 03:44+0000\n"
+"PO-Revision-Date: 2012-05-30 23:19+0200\n"
+"Last-Translator: Børre Gaup <boerre@skolelinux.no>\n"
+"Language-Team: Northern Sami <i18n-sme@lister.ping.uio.no>\n"
+"Language: se\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.4\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Environment: kde\n"
+"X-Accelerator-Marker: &\n"
+"X-Text-Markup: qtrich\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+#, fuzzy
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Dán prográmma liseansaeavttut eai leat almmuhuvvon.\n"
+"Iskka liseansaeavttuid veahketeavsttas dahje gáldokodas.\n"
+
+#: lib/kaboutdata.cpp:306
+#, fuzzy, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Dát prográmma juhkkojuvvo %1 eavttuid mielde."
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License veršuvdna 2"
+
+#: lib/kaboutdata.cpp:356
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public liseansa, veršuvdna 2"
+
+# unreviewed-context
+#: lib/kaboutdata.cpp:360
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD-liseansa"
+
+# unreviewed-context
+#: lib/kaboutdata.cpp:361
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD-liseansa"
+
+# unreviewed-context
+#: lib/kaboutdata.cpp:364
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artisttalaš-liseansa"
+
+# unreviewed-context
+#: lib/kaboutdata.cpp:365
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artisttalaš-liseansa"
+
+#: lib/kaboutdata.cpp:368
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public License"
+
+#: lib/kaboutdata.cpp:372
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public liseansa, veršuvdna 3"
+
+#: lib/kaboutdata.cpp:376
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public liseansa, veršuvdna 3"
+
+#: lib/kaboutdata.cpp:380
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr ""
+
+#: lib/kaboutdata.cpp:381
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr ""
+
+#: lib/kaboutdata.cpp:385
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Iešdefinerejuvvon"
+
+#: lib/kaboutdata.cpp:388
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Ii meroštuvvon"
+
+#: lib/kaboutdata.cpp:937
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1165
+#, fuzzy
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Čájet dieđuid čálli birra"
+
+#: lib/kaboutdata.cpp:1166
+#, fuzzy
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Čájet dieđu liseanssa birra"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1178
+#, fuzzy
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Olmmoš gii háliida leat namakeahttá lea čállán dán prográmma."
+
+#: lib/kaboutdata.cpp:1180
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1191
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1193
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr ""
+
+#: lib/plugin/kpluginloader.cpp:122
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr ""
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr ""
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 S"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kS"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MS"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GS"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TS"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PS"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 ES"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZS"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YS"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 S"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KS"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MS"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GS"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TS"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PS"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 ES"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZS"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YS"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 S"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiS"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiS"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiS"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiS"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 TiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 beaivvi"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 diimmu"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minuhta"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 sekundda"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] ""
+msgstr[1] ""
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 beaivvi"
+msgstr[1] "%1 beaivvi"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 diimmu"
+msgstr[1] "%1 diimmu"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 minuhta"
+msgstr[1] "%1 minuhta"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 sekundda"
+msgstr[1] "%1 sekundda"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 ja %2"
+
+#: lib/util/kformatprivate.cpp:509
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:519
+#, fuzzy
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Ihttin"
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Otne"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Ikte"
+
+#: lib/util/kformatprivate.cpp:529
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:531
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:533
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:539
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:546
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:548
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:550
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:554
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:556
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:558
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr ""
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Danishka Navin <danishka@gmail.com>, 2008, 2009, 2010, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2011-07-25 07:45+0530\n"
+"Last-Translator: Danishka Navin <danishka@gmail.com>\n"
+"Language-Team: Sinhala <danishka@gmail.com>\n"
+"Language: si\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Lokalize 1.2\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"මෙම වැඩසටහන සඳහා කිසිදු ලියාපදිංචි කිරීමේ බලපත්ර නියමයක් විශේෂණය කර නොමැත.\n"
+"ලියාපදිංචි කිරීමේ බලපත්ර සඳහා ප්රලේඛනය හෝ මූලය පරීක්ෂා කරන්න.\n"
+
+#: lib/kaboutdata.cpp:306
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "%1 හි වගන්ති යටතේ මෙම වැඩසටහන බෙදාහරිණ ලදි."
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU සාමාන්ය පොදු බලපත්ර 2 වන වෙළුම"
+
+#: lib/kaboutdata.cpp:356
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU අවම සාමාන්ය පොදු බලපත්ර 2 වන වෙළුම"
+
+#: lib/kaboutdata.cpp:360
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD බලපත්රය"
+
+#: lib/kaboutdata.cpp:361
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD බලපත්රය"
+
+#: lib/kaboutdata.cpp:364
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "කලාත්මක බලපත්රය"
+
+#: lib/kaboutdata.cpp:365
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "කලාත්මක බලපත්රය"
+
+#: lib/kaboutdata.cpp:368
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q පොදු බලපත්රය"
+
+#: lib/kaboutdata.cpp:372
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License Version 3"
+
+#: lib/kaboutdata.cpp:376
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License Version 3"
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:381
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU අවම සාමාන්ය පොදු බලපත්ර 2 වන වෙළුම"
+
+#: lib/kaboutdata.cpp:385
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "රිසිකළ"
+
+#: lib/kaboutdata.cpp:388
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "විශේෂිතව නොදැක්වු"
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>ලොව වටා සිටින පරිවර්තන කණ්ඩායම් ස්තුති වන්නට KDE විවිධ භාෂාවන්ට පරිවර්තනය කර ඇත.</"
+"p><p>KDE ජාත්යන්තරීකරණය පිළිබඳ බොහෝ තොරතුරු සඳහා <a href=\"http://l10n.kde.org"
+"\">http://l10n.kde.org</a> වෙතට පිවිසෙන්න</p>"
+
+#: lib/kaboutdata.cpp:1165
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "කතෘගේ තොරතුරු පෙන්වන්න"
+
+#: lib/kaboutdata.cpp:1166
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "බලපත්ර තොරතුරු පෙන්වන්න"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1178
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "නිර්නාමික ලෙස සිටීමට අවශ්ය කෙනෙකු වැඩසටහන ලියා ඇත."
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 ලියන ල්දේ\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "කරුණාකර දෝෂ වාර්තා කිරීමට http://bugs.kde.org භාවිත කරන්න.\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "කරුණාකර දෝෂය %1 වෙතට දන්වන්න.\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "%1 පුස්තකාලය KDE 4 අනුකූල වැඩපොලක් ලබා නොදේ."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "පෙ.ව."
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "ප.ව"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "පෙ.ව."
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Ok"
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "හරි"
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgctxt "Coptic month 4 - ShortName"
+#| msgid "Kia"
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Kia"
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "පෙ.ව."
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "Ethiopian month 8 - ShortName"
+#| msgid "Miy"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Miy"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tir"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "ප.ව."
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "ප.ව."
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "සැකසුම්"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "ලබා දෙන්න"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "පෙ.ව."
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, fuzzy, qt-format
+#| msgctxt "memory size in 1024 bytes"
+#| msgid "%1 KB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, fuzzy, qt-format
+#| msgctxt "size in 1024 bytes"
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, fuzzy, qt-format
+#| msgctxt "size in 2^20 bytes"
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, fuzzy, qt-format
+#| msgctxt "size in 2^30 bytes"
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, fuzzy, qt-format
+#| msgctxt "size in 2^50 bytes"
+#| msgid "%1 PiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, fuzzy, qt-format
+#| msgctxt "size in 2^60 bytes"
+#| msgid "%1 EiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, fuzzy, qt-format
+#| msgctxt "size in 2^70 bytes"
+#| msgid "%1 ZiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, fuzzy, qt-format
+#| msgctxt "size in 2^80 bytes"
+#| msgid "%1 YiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "දින %1"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "පැය %1"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "මිනිත්තු %1"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "තත්පර %1"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "මිලිතත්පර %1"
+msgstr[1] "මිලිතත්පර %1"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "දින %1"
+msgstr[1] "දින %1"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "පැය %1"
+msgstr[1] "පැය %1"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "මිනිත්තු %1"
+msgstr[1] "මිනිත්තු %1"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "තත්පර %1"
+msgstr[1] "තත්පර %1"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 සහ %2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "InvalidCA"
+
+#: lib/util/kformatprivate.cpp:519
+#, fuzzy
+#| msgctxt "@option tomorrow"
+#| msgid "Tomorrow"
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "හෙට"
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "අද"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "ඊයේ"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+#| msgctxt "@option last month"
+#| msgid "Last Month"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "පසුගිය මාසය"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "අඟහරුවාදා"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "බදාද"
+
+#: lib/util/kformatprivate.cpp:535
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "බ්රහස්පතින්දා"
+
+#: lib/util/kformatprivate.cpp:537
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "සිකුරාදා"
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "සෙනසුරාදා"
+
+#: lib/util/kformatprivate.cpp:541
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "ඉරිදා"
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+#| msgctxt "@option next month"
+#| msgid "Next Month"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "මීළඟ මාසය"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "අඟහරුවාදා"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "බදාද"
+
+#: lib/util/kformatprivate.cpp:552
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "බ්රහස්පතින්දා"
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "සිකුරාදා"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "සෙනසුරාදා"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "ඉරිදා"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, fuzzy, qt-format
+#| msgctxt "City, Country"
+#| msgid "%1, %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# translation of kdelibs4.po to Slovak
+# Stanislav Visnovsky <visnovsky@nenya.ms.mff.cuni.cz>, 2002.
+# Stanislav Visnovsky <visnovsky@kde.org>, 2003, 2004, 2005.
+# Richard Fric <Richard.Fric@kdemail.net>, 2006, 2007, 2010.
+# Michal Gaspar <miguel@portugal.sk>, 2006.
+# Jakub <vatrtj@gmail.com>, 2009.
+# Michal Sulek <misurel@gmail.com>, 2009, 2010, 2011.
+# Richard Frič <Richard.Fric@kdemail.net>, 2011.
+# Roman Paholík <wizzardsk@gmail.com>, 2012, 2013, 2014, 2015, 2016.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2016-08-05 22:05+0100\n"
+"Last-Translator: Roman Paholik <wizzardsk@gmail.com>\n"
+"Language-Team: Slovak <kde-sk@linux.sk>\n"
+"Language: sk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 2.0\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Pre tento program neboli špecifikované žiadne licenčné podmienky.\n"
+"Prosím, pozrite sa do dokumentácie alebo do zdrojových kódov,\n"
+"či neobsahujú licenčné podmienky.\n"
+
+#: lib/kaboutdata.cpp:306
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Tento program je distribuovaný pod licenciou %1."
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License verzia 2"
+
+#: lib/kaboutdata.cpp:356
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License verzia 2"
+
+#: lib/kaboutdata.cpp:360
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Licencia BSD"
+
+#: lib/kaboutdata.cpp:361
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Licencia BSD"
+
+#: lib/kaboutdata.cpp:364
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Licencia Artistic"
+
+#: lib/kaboutdata.cpp:365
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Licencia Artistic"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public License"
+
+#: lib/kaboutdata.cpp:372
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License verzia 3"
+
+#: lib/kaboutdata.cpp:376
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License verzia 3"
+
+#: lib/kaboutdata.cpp:380
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:381
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License Version 2.1"
+
+#: lib/kaboutdata.cpp:385
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Vlastné"
+
+#: lib/kaboutdata.cpp:388
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Nezadané"
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt ""
+#| "KAboutData|replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE je preložené do rôznych jazykov, okrem iného aj do slovenčiny. </p> "
+"<p>Do slovenčiny prekladá KDE tím prekladateľov pod vedením Romana Paholíka."
+"</p> <p>Ďalšie informácie o preklade KDE ale aj o tom, ako sa do prekladu "
+"zapojiť, sú na adrese <a href=\"http://l10n.kde.org\">http://l10n.kde.org</"
+"a></p>"
+
+#: lib/kaboutdata.cpp:1165
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Zobrazí informácie o autorovi."
+
+#: lib/kaboutdata.cpp:1166
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Zobrazí licenčné informácie ."
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Základný názov súboru položky plochy pre túto aplikáciu."
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "meno súboru"
+
+#: lib/kaboutdata.cpp:1178
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Túto aplikáciu napísal niekto, kto chce zostať v anonymite."
+
+#: lib/kaboutdata.cpp:1180
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 napísal:"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgctxt "KAboutData CLI|"
+#| msgid "Please use http://bugs.kde.org to report bugs."
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Prosím, použite http://bugs.kde.org na hlásenie chýb."
+
+#: lib/kaboutdata.cpp:1193
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Prosím nahláste chyby na %1."
+
+#: lib/plugin/kpluginloader.cpp:122
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Knižnica %1 neposkytuje KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "dop."
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "odp."
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "dop."
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "dop."
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "@action"
+#| msgid "Mail"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Pošta"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "@item Text character set"
+#| msgid "Thai"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Thajské"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "o."
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "o."
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Upraviť"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Odoslať"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "dop."
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2.%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h%2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2m%3.%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 dní"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 hodín"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minút"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 sekúnd"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n millisecond(s)"
+#| msgid_plural "%n millisecond(s)"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n milisekunda"
+msgstr[1] "%n milisekunda"
+msgstr[2] "%n milisekunda"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n day(s)"
+#| msgid_plural "%n day(s)"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n deň"
+msgstr[1] "%n deň"
+msgstr[2] "%n deň"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n hour(s)"
+#| msgid_plural "%n hour(s)"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n hodina"
+msgstr[1] "%n hodina"
+msgstr[2] "%n hodina"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n minute(s)"
+#| msgid_plural "%n minute(s)"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minúta"
+msgstr[1] "%n minúta"
+msgstr[2] "%n minúta"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n second(s)"
+#| msgid_plural "%n second(s)"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n sekunda"
+msgstr[1] "%n sekunda"
+msgstr[2] "%n sekunda"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 a %2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+#| msgid "Invalid item."
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Neplatná položka."
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Zajtra"
+
+#: lib/util/kformatprivate.cpp:521
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Dnes"
+
+#: lib/util/kformatprivate.cpp:523
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Včera"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+#| msgctxt "@option last month"
+#| msgid "Last Month"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Minulý mesiac"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+#| msgctxt "@option last year"
+#| msgid "Last Year"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "Minulý rok"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+#| msgctxt ""
+#| "referring to a filter on the modification and usage date of files/"
+#| "resources"
+#| msgid "Last Week"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Minulý týždeň"
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+#| msgctxt "@option last year"
+#| msgid "Last Year"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "Minulý rok"
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+#| msgctxt "@option next month"
+#| msgid "Next Month"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Nasledujúci mesiac"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Nasledujúci rok"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+#| msgctxt "@option next week"
+#| msgid "Next Week"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Nasledujúci týždeň"
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Nasledujúci rok"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Nasledujúci rok"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Nasledujúci rok"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# translation of kdelibs4.po to Slovenian
+# Translation of kdelibs4.po to Slovenian
+# KDELIBS translation to Slovenian language
+# $Id: kdelibs4.po 685926 2007-07-10 04:25:11Z scripty $
+# $Source$
+#
+# Copyright (C) 2002,2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+# Roman Maurer <roman.maurer@amis.net>, 2002.
+# Gregor Rakar <gregor.rakar@kiss.uni-lj.si>, 2002,2003.
+# Gregor Rakar <gregor.rakar@kiss.si>, 2003, 2004, 2005.
+# Andrej Vernekar <andrej.vernekar@moj.net>, 2005, 2007, 2008, 2009, 2010.
+# Jure Repinc <jlp@holodeck1.com>, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013.
+# Andrej Vernekar <andrej.vernerkar@moj.net>, 2008, 2011, 2012.
+# Andrej Mernik <andrejm@ubuntu.si>, 2012, 2013, 2014, 2015, 2016, 2017, 2018.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2018-01-12 21:07+0100\n"
+"Last-Translator: Andrej Mernik <andrejm@ubuntu.si>\n"
+"Language-Team: Slovenian <lugos-slo@lugos.si>\n"
+"Language: sl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 2.0\n"
+"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n"
+"%100==4 ? 3 : 0);\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Za ta program ni določenih pogojev licenciranja. Oglejte\n"
+"si dokumentacijo ali izvorno kodo za morebitne\n"
+"licenčne pogoje.\n"
+
+#: lib/kaboutdata.cpp:306
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Ta program se razširja pod pogoji %1."
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "Splošno dovoljenje GNU različica 2"
+
+#: lib/kaboutdata.cpp:356
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "Manj splošno dovoljenje GNU različica 2"
+
+#: lib/kaboutdata.cpp:360
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Licenca BSD"
+
+#: lib/kaboutdata.cpp:361
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Licenca BSD"
+
+#: lib/kaboutdata.cpp:364
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Umetniška licenca"
+
+#: lib/kaboutdata.cpp:365
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Umetniška licenca"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Javna licenca Q"
+
+#: lib/kaboutdata.cpp:372
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "Splošno dovoljenje GNU različica 3"
+
+#: lib/kaboutdata.cpp:376
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "Manj splošno dovoljenje GNU različica 3"
+
+#: lib/kaboutdata.cpp:380
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:381
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "Manj splošno dovoljenje GNU različica 2.1"
+
+#: lib/kaboutdata.cpp:385
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Po meri"
+
+#: lib/kaboutdata.cpp:388
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Ni navedena"
+
+#: lib/kaboutdata.cpp:937
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE je v slovenščino prevedla skupina za slovenjenje Linuxa pri Društvu "
+"uporabnikov Linuxa Slovenije - Lugos.</p><p>Več podrobnosti poiščite na "
+"straneh <a href=\"http://www.lugos.si/\">www.lugos.si</a> in <a href="
+"\"https://l10n.kde.org/\">l10n.kde.org</a>.</p><p>Napake v prevodih in "
+"predloge za izboljšave nam sporočite na dopisni seznam <a href=\"http://"
+"liste2.lugos.si/cgi-bin/mailman/listinfo/lugos-slo\">lugos-slo</a>. Na istem "
+"dopisnem seznamu se lahko tudi pridružite skupnosti prevajalcev KDE-ja.</p>"
+
+#: lib/kaboutdata.cpp:1165
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Pokaži podrobnosti o avtorju."
+
+#: lib/kaboutdata.cpp:1166
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Pokaži podrobnosti o licenci."
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Osnovno ime datoteke namiznega vnosa za ta program."
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "ime datoteke"
+
+#: lib/kaboutdata.cpp:1178
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Ta program je napisal nekdo, ki želi ostati anonimen."
+
+#: lib/kaboutdata.cpp:1180
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 je napisal(a):"
+
+#: lib/kaboutdata.cpp:1191
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Za poročanje o hroščih uporabite https://bugs.kde.org."
+
+#: lib/kaboutdata.cpp:1193
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Za poročanje o hroščih uporabite %1."
+
+#: lib/plugin/kpluginloader.cpp:122
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Knjižnica %1 ne ponuja KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr ""
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr ""
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1 min %2.%3 s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1 min %2 s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1 u %2 min"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1 u %2 min %3.%4 s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1 u %2 min %3 s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 dni"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 ur"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minut"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 sekund"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n milisekund"
+msgstr[1] "%n milisekunda"
+msgstr[2] "%n milisekundi"
+msgstr[3] "%n milisekunde"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n dni"
+msgstr[1] "%n dan"
+msgstr[2] "%n dneva"
+msgstr[3] "%n dnevi"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n ur"
+msgstr[1] "%n ura"
+msgstr[2] "%n uri"
+msgstr[3] "%n ure"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minut"
+msgstr[1] "%n minuta"
+msgstr[2] "%n minuti"
+msgstr[3] "%n minute"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n sekund"
+msgstr[1] "%n sekunda"
+msgstr[2] "%n sekundi"
+msgstr[3] "%n sekunde"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 in %2"
+
+#: lib/util/kformatprivate.cpp:509
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Neveljaven datum"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Jutri"
+
+#: lib/util/kformatprivate.cpp:521
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Danes"
+
+#: lib/util/kformatprivate.cpp:523
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Včeraj"
+
+#: lib/util/kformatprivate.cpp:529
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Prejšnji ponedeljek"
+
+#: lib/util/kformatprivate.cpp:531
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "Prejšnji torek"
+
+#: lib/util/kformatprivate.cpp:533
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Prejšnja sreda"
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "Prejšnji četrtek"
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "Prejšnji petek"
+
+#: lib/util/kformatprivate.cpp:539
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "Prejšnja sobota"
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "Prejšnja nedelja"
+
+#: lib/util/kformatprivate.cpp:546
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Naslednji ponedeljek"
+
+#: lib/util/kformatprivate.cpp:548
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Naslednji torek"
+
+#: lib/util/kformatprivate.cpp:550
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Naslednja sreda"
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "Naslednji četrtek"
+
+#: lib/util/kformatprivate.cpp:554
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Naslednji petek"
+
+#: lib/util/kformatprivate.cpp:556
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Naslednja sobota"
+
+#: lib/util/kformatprivate.cpp:558
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Naslednja nedelja"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# Agron Selimaj <as9902613@gmail.com>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: kde4libs\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2012-01-19 00:20-0500\n"
+"Last-Translator: Agron Selimaj <as9902613@gmail.com>\n"
+"Language-Team: Albanian <sq@li.org>\n"
+"Language: sq\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Launchpad-Export-Date: 2010-11-24 03:19+0000\n"
+"X-Generator: Lokalize 1.2\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Nuk janë specifikuar terma liçensimi për këtë program.\n"
+"Ju lutemi kontrolloni dokumentimin ose burimin për ndonjë\n"
+"term liçensimi.\n"
+
+#: lib/kaboutdata.cpp:306
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Ky program shpërndahet nën termat e %1."
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "Liçensa e Përgjithshme Publike GNU Versioni 2"
+
+#: lib/kaboutdata.cpp:356
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "Liçensa Më Pak e Përgjithshme Publike GNU Versioni 2"
+
+#: lib/kaboutdata.cpp:360
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Liçensa BSD"
+
+#: lib/kaboutdata.cpp:361
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Liçensa BSD"
+
+#: lib/kaboutdata.cpp:364
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Liçensa Artistike"
+
+#: lib/kaboutdata.cpp:365
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Liçensa Artistike"
+
+#: lib/kaboutdata.cpp:368
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Liçensa Publike Q"
+
+#: lib/kaboutdata.cpp:372
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "Liçensa e Përgjithshme Publike GNU Versioni 3"
+
+#: lib/kaboutdata.cpp:376
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "Liçensa Më Pak e Përgjithshme Publike GNU Versioni 3"
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:381
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "Liçensa Më Pak e Përgjithshme Publike GNU Versioni 2"
+
+#: lib/kaboutdata.cpp:385
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Personalizuar"
+
+#: lib/kaboutdata.cpp:388
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "I papërcaktuar"
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE është përkthyer në shumë gjuhë falë punës së skuadrave të përkthimit "
+"kudo nëpër botë.</p><p>Për më tepër informacion rreth ndërkombëtarizimit të "
+"KDE vizitoni <a href=\"http://l10n.kde.org\">http://l10n.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1165
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Shfaq informacion për autorin"
+
+#: lib/kaboutdata.cpp:1166
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Shfaq informacion për liçensën"
+
+#: lib/kaboutdata.cpp:1168
+#, fuzzy
+#| msgid "Enter the user name you want to run the application as."
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Vendosni emrin e përdoruesit që dëshironi për të nisur këtë program."
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1178
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Programi u shkruajt nga dikush që dëshiron të ngelet anonim."
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 u shkruajt nga\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Ju lutemi përdorni http://bugs.kde.org për të raportuar gabimet.\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Ju lutemi raportoni gabimet tek %1.\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "pm"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgid "Misc"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Të Ndryshme"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "@item Text character set"
+#| msgid "Thai"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tailandeze"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ndrysho"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Dërgo"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, fuzzy, qt-format
+#| msgctxt "@action:button filter-cancel"
+#| msgid "%1"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr ""
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr ""
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr ""
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr ""
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr ""
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr ""
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr ""
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr ""
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, fuzzy, qt-format
+#| msgctxt "@action:button filter-cancel"
+#| msgid "%1"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr ""
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr ""
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr ""
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr ""
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr ""
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr ""
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr ""
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr ""
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, fuzzy, qt-format
+#| msgctxt "@action:button filter-cancel"
+#| msgid "%1"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr ""
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr ""
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr ""
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr ""
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr ""
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr ""
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr ""
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "1 day"
+#| msgid_plural "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "1 ditë"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "1 hour"
+#| msgid_plural "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "1 orë"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "1 minute"
+#| msgid_plural "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "1 minutë"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "1 second"
+#| msgid_plural "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "1 sekondë"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "1 second"
+#| msgid_plural "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "1 sekondë"
+msgstr[1] "1 sekondë"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "1 day"
+#| msgid_plural "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "1 ditë"
+msgstr[1] "1 ditë"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "1 hour"
+#| msgid_plural "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "1 orë"
+msgstr[1] "1 orë"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "1 minute"
+#| msgid_plural "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "1 minutë"
+msgstr[1] "1 minutë"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "1 second"
+#| msgid_plural "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "1 sekondë"
+msgstr[1] "1 sekondë"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 dhe %2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+#| msgid "invalid flags"
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "flamurë të pavlefshëm"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Sot"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Dje"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Muaji i ardhshëm"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "&Faqja e Fundit"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+#| msgctxt ""
+#| "referring to a filter on the modification and usage date of files/"
+#| "resources"
+#| msgid "Last Week"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Javën e kaluar"
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "&Faqja e Fundit"
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Muaji i ardhshëm"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Viti tjetër"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Viti tjetër"
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Viti tjetër"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Viti tjetër"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Viti tjetër"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, fuzzy, qt-format
+#| msgctxt "concatenation of date/time and time zone"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1 %2"
--- /dev/null
+# Translation of kcoreaddons5_qt.po into Serbian.
+# Marko Rosic <roske@kde.org.yu>, 2003.
+# Toplica Tanaskovic <toptan@kde.org.yu>, 2003, 2004, 2005.
+# Chusslove Illich <caslav.ilic@gmx.net>, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017.
+# Dalibor Djuric <daliborddjuric@gmail.com>, 2009, 2010, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: kcoreaddons5_qt\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2017-10-14 23:06+0200\n"
+"Last-Translator: Chusslove Illich <caslav.ilic@gmx.net>\n"
+"Language-Team: Serbian <kde-i18n-sr@kde.org>\n"
+"Language: sr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Accelerator-Marker: &\n"
+"X-Text-Markup: qtrich\n"
+"X-Environment: kde\n"
+"X-Wrapping: fine\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Нису наведени услови лиценцирања за овај програм.\n"
+"Проверите да ли су услови лиценцирања наведени у\n"
+"документацији или изворном коду.\n"
+
+#: lib/kaboutdata.cpp:306
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Услови за дистрибуирање програма: %1."
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "ОЈЛ в2"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "Гнуова Општа јавна лиценца, верзија 2"
+
+#: lib/kaboutdata.cpp:356
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "МОЈЛ в3"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "Гнуова Мања општа јавна лиценца, верзија 2"
+
+#: lib/kaboutdata.cpp:360
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "БСД"
+
+#: lib/kaboutdata.cpp:361
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "БСД"
+
+#: lib/kaboutdata.cpp:364
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Уметничка"
+
+#: lib/kaboutdata.cpp:365
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Уметничка"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "КуПЛ 1.0"
+
+#: lib/kaboutdata.cpp:369
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Ку јавна лиценца"
+
+#: lib/kaboutdata.cpp:372
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "ОЈЛ в3"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "Гнуова Општа јавна лиценца, верзија 3"
+
+#: lib/kaboutdata.cpp:376
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "МОЈЛ в3"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "Гнуова Мања општа јавна лиценца, верзија 3"
+
+#: lib/kaboutdata.cpp:380
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "МОЈЛ в2.1"
+
+#: lib/kaboutdata.cpp:381
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "Гнуова Мања општа јавна лиценца, верзија 2.1"
+
+#: lib/kaboutdata.cpp:385
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "(посебна)"
+
+#: lib/kaboutdata.cpp:388
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "(није наведена)"
+
+#: lib/kaboutdata.cpp:937
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<html><p>О преводу КДЕ‑а на српски језик можете читати на страницама <a "
+"href='http://sr.l10n.kde.org'>sr.l10n.kde.org</a>. Међу њима се налазе <a "
+"href='http://sr.l10n.kde.org/pojmovnik.php'>појмовник</a> и <a href='http://"
+"sr.l10n.kde.org/trapnakron/'>трапнакрон</a>, који вам могу послужити да "
+"разјасните појмове и повежете преведене с изворним изразима када год вам то "
+"затреба.</p><p>За детаљније информације о локализацији КДЕ‑а уопште, "
+"посетите <a href='https://l10n.kde.org'>https://l10n.kde.org</a>.</p></html>"
+
+#: lib/kaboutdata.cpp:1165
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Прикажи податке о ауторима."
+
+#: lib/kaboutdata.cpp:1166
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Прикажи податке о лиценци."
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Основно име фајла ставке површи за овај програм."
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "Име фајла"
+
+#: lib/kaboutdata.cpp:1178
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Овај програм је написао неко ко жели да остане анониман."
+
+#: lib/kaboutdata.cpp:1180
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 написали:"
+
+#: lib/kaboutdata.cpp:1191
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Користите https://bugs.kde.org за пријаву грешака."
+
+#: lib/kaboutdata.cpp:1193
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Пријавите грешке на %1."
+
+#: lib/plugin/kpluginloader.cpp:122
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Библиотека %1 не нуди KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr ""
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr ""
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1м%2,%3с"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1м%2с"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1ч%2м"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1ч%2м%3,%4с"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1ч%2м%3с"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1.%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1.%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1.%2.%3,%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1.%2.%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 дана"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 сати"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 минута"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 секунди"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n милисекунда"
+msgstr[1] "%n милисекунде"
+msgstr[2] "%n милисекунди"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n дан"
+msgstr[1] "%n дана"
+msgstr[2] "%n дана"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n сат"
+msgstr[1] "%n сата"
+msgstr[2] "%n сати"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n минут"
+msgstr[1] "%n минута"
+msgstr[2] "%n минута"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n секунда"
+msgstr[1] "%n секунде"
+msgstr[2] "%n секунди"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 и %2"
+
+#: lib/util/kformatprivate.cpp:509
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "лош датум"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "сутра"
+
+#: lib/util/kformatprivate.cpp:521
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "данас"
+
+#: lib/util/kformatprivate.cpp:523
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "јуче"
+
+#: lib/util/kformatprivate.cpp:529
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "прошли понедељак"
+
+#: lib/util/kformatprivate.cpp:531
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "прошли уторак"
+
+#: lib/util/kformatprivate.cpp:533
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "прошла среда"
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "прошли четвртак"
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "прошли петак"
+
+#: lib/util/kformatprivate.cpp:539
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "прошла субота"
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "прошла недеља"
+
+#: lib/util/kformatprivate.cpp:546
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "идући понедељак"
+
+#: lib/util/kformatprivate.cpp:548
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "идући уторак"
+
+#: lib/util/kformatprivate.cpp:550
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "идућа среда"
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "идући четвртак"
+
+#: lib/util/kformatprivate.cpp:554
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "идући петак"
+
+#: lib/util/kformatprivate.cpp:556
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "идућа субота"
+
+#: lib/util/kformatprivate.cpp:558
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "идућа недеља"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# Translation of kcoreaddons5_qt.po into Serbian.
+# Marko Rosic <roske@kde.org.yu>, 2003.
+# Toplica Tanaskovic <toptan@kde.org.yu>, 2003, 2004, 2005.
+# Chusslove Illich <caslav.ilic@gmx.net>, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017.
+# Dalibor Djuric <daliborddjuric@gmail.com>, 2009, 2010, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: kcoreaddons5_qt\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2017-10-14 23:06+0200\n"
+"Last-Translator: Chusslove Illich <caslav.ilic@gmx.net>\n"
+"Language-Team: Serbian <kde-i18n-sr@kde.org>\n"
+"Language: sr@ijekavian\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Accelerator-Marker: &\n"
+"X-Text-Markup: qtrich\n"
+"X-Environment: kde\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Нису наведени услови лиценцирања за овај програм.\n"
+"Провјерите да ли су услови лиценцирања наведени у\n"
+"документацији или изворном коду.\n"
+
+#: lib/kaboutdata.cpp:306
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Услови за дистрибуирање програма: %1."
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "ОЈЛ в2"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "Гнуова Општа јавна лиценца, верзија 2"
+
+#: lib/kaboutdata.cpp:356
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "МОЈЛ в3"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "Гнуова Мања општа јавна лиценца, верзија 2"
+
+#: lib/kaboutdata.cpp:360
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "БСД"
+
+#: lib/kaboutdata.cpp:361
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "БСД"
+
+#: lib/kaboutdata.cpp:364
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Умјетничка"
+
+#: lib/kaboutdata.cpp:365
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Умјетничка"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "КуПЛ 1.0"
+
+#: lib/kaboutdata.cpp:369
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Ку јавна лиценца"
+
+#: lib/kaboutdata.cpp:372
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "ОЈЛ в3"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "Гнуова Општа јавна лиценца, верзија 3"
+
+#: lib/kaboutdata.cpp:376
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "МОЈЛ в3"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "Гнуова Мања општа јавна лиценца, верзија 3"
+
+#: lib/kaboutdata.cpp:380
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "МОЈЛ в2.1"
+
+#: lib/kaboutdata.cpp:381
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "Гнуова Мања општа јавна лиценца, верзија 2.1"
+
+#: lib/kaboutdata.cpp:385
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "(посебна)"
+
+#: lib/kaboutdata.cpp:388
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "(није наведена)"
+
+#: lib/kaboutdata.cpp:937
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<html><p>О преводу КДЕ‑а на српски језик можете читати на страницама <a "
+"href='http://sr.l10n.kde.org'>sr.l10n.kde.org</a>. Међу њима се налазе <a "
+"href='http://sr.l10n.kde.org/pojmovnik.php'>појмовник</a> и <a href='http://"
+"sr.l10n.kde.org/trapnakron/'>трапнакрон</a>, који вам могу послужити да "
+"разјасните појмове и повежете преведене с изворним изразима када год вам то "
+"затреба.</p><p>За детаљније информације о локализацији КДЕ‑а уопште, "
+"посјетите <a href='https://l10n.kde.org'>https://l10n.kde.org</a>.</p></html>"
+
+#: lib/kaboutdata.cpp:1165
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Прикажи податке о ауторима."
+
+#: lib/kaboutdata.cpp:1166
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Прикажи податке о лиценци."
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Основно име фајла ставке површи за овај програм."
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "Име фајла"
+
+#: lib/kaboutdata.cpp:1178
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Овај програм је написао неко ко жели да остане анониман."
+
+#: lib/kaboutdata.cpp:1180
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 написали:"
+
+#: lib/kaboutdata.cpp:1191
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Користите https://bugs.kde.org за пријаву грешака."
+
+#: lib/kaboutdata.cpp:1193
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Пријавите грешке на %1."
+
+#: lib/plugin/kpluginloader.cpp:122
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Библиотека %1 не нуди KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr ""
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr ""
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1м%2,%3с"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1м%2с"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1ч%2м"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1ч%2м%3,%4с"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1ч%2м%3с"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1.%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1.%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1.%2.%3,%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1.%2.%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 дана"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 сати"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 минута"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 секунди"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n милисекунда"
+msgstr[1] "%n милисекунде"
+msgstr[2] "%n милисекунди"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n дан"
+msgstr[1] "%n дана"
+msgstr[2] "%n дана"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n сат"
+msgstr[1] "%n сата"
+msgstr[2] "%n сати"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n минут"
+msgstr[1] "%n минута"
+msgstr[2] "%n минута"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n секунда"
+msgstr[1] "%n секунде"
+msgstr[2] "%n секунди"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 и %2"
+
+#: lib/util/kformatprivate.cpp:509
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "лош датум"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "сутра"
+
+#: lib/util/kformatprivate.cpp:521
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "данас"
+
+#: lib/util/kformatprivate.cpp:523
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "јуче"
+
+#: lib/util/kformatprivate.cpp:529
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "прошли понедељак"
+
+#: lib/util/kformatprivate.cpp:531
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "прошли уторак"
+
+#: lib/util/kformatprivate.cpp:533
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "прошла среда"
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "прошли четвртак"
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "прошли петак"
+
+#: lib/util/kformatprivate.cpp:539
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "прошла субота"
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "прошла недеља"
+
+#: lib/util/kformatprivate.cpp:546
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "идући понедељак"
+
+#: lib/util/kformatprivate.cpp:548
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "идући уторак"
+
+#: lib/util/kformatprivate.cpp:550
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "идућа среда"
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "идући четвртак"
+
+#: lib/util/kformatprivate.cpp:554
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "идући петак"
+
+#: lib/util/kformatprivate.cpp:556
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "идућа субота"
+
+#: lib/util/kformatprivate.cpp:558
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "идућа недеља"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# Translation of kcoreaddons5_qt.po into Serbian.
+# Marko Rosic <roske@kde.org.yu>, 2003.
+# Toplica Tanaskovic <toptan@kde.org.yu>, 2003, 2004, 2005.
+# Chusslove Illich <caslav.ilic@gmx.net>, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017.
+# Dalibor Djuric <daliborddjuric@gmail.com>, 2009, 2010, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: kcoreaddons5_qt\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2017-10-14 23:06+0200\n"
+"Last-Translator: Chusslove Illich <caslav.ilic@gmx.net>\n"
+"Language-Team: Serbian <kde-i18n-sr@kde.org>\n"
+"Language: sr@ijekavianlatin\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Accelerator-Marker: &\n"
+"X-Text-Markup: qtrich\n"
+"X-Environment: kde\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Nisu navedeni uslovi licenciranja za ovaj program.\n"
+"Provjerite da li su uslovi licenciranja navedeni u\n"
+"dokumentaciji ili izvornom kodu.\n"
+
+#: lib/kaboutdata.cpp:306
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Uslovi za distribuiranje programa: %1."
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "OJL v2"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU‑ova Opšta javna licenca, verzija 2"
+
+#: lib/kaboutdata.cpp:356
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "MOJL v3"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU‑ova Manja opšta javna licenca, verzija 2"
+
+#: lib/kaboutdata.cpp:360
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD"
+
+#: lib/kaboutdata.cpp:361
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD"
+
+#: lib/kaboutdata.cpp:364
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Umjetnička"
+
+#: lib/kaboutdata.cpp:365
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Umjetnička"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL 1.0"
+
+#: lib/kaboutdata.cpp:369
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q javna licenca"
+
+#: lib/kaboutdata.cpp:372
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "OJL v3"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU‑ova Opšta javna licenca, verzija 3"
+
+#: lib/kaboutdata.cpp:376
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "MOJL v3"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU‑ova Manja opšta javna licenca, verzija 3"
+
+#: lib/kaboutdata.cpp:380
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "MOJL v2.1"
+
+#: lib/kaboutdata.cpp:381
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU‑ova Manja opšta javna licenca, verzija 2.1"
+
+#: lib/kaboutdata.cpp:385
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "(posebna)"
+
+#: lib/kaboutdata.cpp:388
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "(nije navedena)"
+
+#: lib/kaboutdata.cpp:937
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<html><p>O prevodu KDE‑a na srpski jezik možete čitati na stranicama <a "
+"href='http://sr.l10n.kde.org'>sr.l10n.kde.org</a>. Među njima se nalaze <a "
+"href='http://sr.l10n.kde.org/pojmovnik.php'>pojmovnik</a> i <a href='http://"
+"sr.l10n.kde.org/trapnakron/'>trapnakron</a>, koji vam mogu poslužiti da "
+"razjasnite pojmove i povežete prevedene s izvornim izrazima kada god vam to "
+"zatreba.</p><p>Za detaljnije informacije o lokalizaciji KDE‑a uopšte, "
+"posjetite <a href='https://l10n.kde.org'>https://l10n.kde.org</a>.</p></html>"
+
+#: lib/kaboutdata.cpp:1165
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Prikaži podatke o autorima."
+
+#: lib/kaboutdata.cpp:1166
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Prikaži podatke o licenci."
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Osnovno ime fajla stavke površi za ovaj program."
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "Ime fajla"
+
+#: lib/kaboutdata.cpp:1178
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Ovaj program je napisao neko ko želi da ostane anoniman."
+
+#: lib/kaboutdata.cpp:1180
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 napisali:"
+
+#: lib/kaboutdata.cpp:1191
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Koristite https://bugs.kde.org za prijavu grešaka."
+
+#: lib/kaboutdata.cpp:1193
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Prijavite greške na %1."
+
+#: lib/plugin/kpluginloader.cpp:122
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Biblioteka %1 ne nudi KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr ""
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr ""
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2,%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1č%2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1č%2m%3,%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1č%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1.%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1.%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1.%2.%3,%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1.%2.%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 dana"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 sati"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minuta"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 sekundi"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n milisekunda"
+msgstr[1] "%n milisekunde"
+msgstr[2] "%n milisekundi"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n dan"
+msgstr[1] "%n dana"
+msgstr[2] "%n dana"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n sat"
+msgstr[1] "%n sata"
+msgstr[2] "%n sati"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minut"
+msgstr[1] "%n minuta"
+msgstr[2] "%n minuta"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n sekunda"
+msgstr[1] "%n sekunde"
+msgstr[2] "%n sekundi"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 i %2"
+
+#: lib/util/kformatprivate.cpp:509
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "loš datum"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "sutra"
+
+#: lib/util/kformatprivate.cpp:521
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "danas"
+
+#: lib/util/kformatprivate.cpp:523
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "juče"
+
+#: lib/util/kformatprivate.cpp:529
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "prošli ponedeljak"
+
+#: lib/util/kformatprivate.cpp:531
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "prošli utorak"
+
+#: lib/util/kformatprivate.cpp:533
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "prošla sreda"
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "prošli četvrtak"
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "prošli petak"
+
+#: lib/util/kformatprivate.cpp:539
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "prošla subota"
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "prošla nedelja"
+
+#: lib/util/kformatprivate.cpp:546
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "idući ponedeljak"
+
+#: lib/util/kformatprivate.cpp:548
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "idući utorak"
+
+#: lib/util/kformatprivate.cpp:550
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "iduća sreda"
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "idući četvrtak"
+
+#: lib/util/kformatprivate.cpp:554
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "idući petak"
+
+#: lib/util/kformatprivate.cpp:556
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "iduća subota"
+
+#: lib/util/kformatprivate.cpp:558
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "iduća nedelja"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# Translation of kcoreaddons5_qt.po into Serbian.
+# Marko Rosic <roske@kde.org.yu>, 2003.
+# Toplica Tanaskovic <toptan@kde.org.yu>, 2003, 2004, 2005.
+# Chusslove Illich <caslav.ilic@gmx.net>, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017.
+# Dalibor Djuric <daliborddjuric@gmail.com>, 2009, 2010, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: kcoreaddons5_qt\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2017-10-14 23:06+0200\n"
+"Last-Translator: Chusslove Illich <caslav.ilic@gmx.net>\n"
+"Language-Team: Serbian <kde-i18n-sr@kde.org>\n"
+"Language: sr@latin\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Accelerator-Marker: &\n"
+"X-Text-Markup: qtrich\n"
+"X-Environment: kde\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Nisu navedeni uslovi licenciranja za ovaj program.\n"
+"Proverite da li su uslovi licenciranja navedeni u\n"
+"dokumentaciji ili izvornom kodu.\n"
+
+#: lib/kaboutdata.cpp:306
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Uslovi za distribuiranje programa: %1."
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "OJL v2"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU‑ova Opšta javna licenca, verzija 2"
+
+#: lib/kaboutdata.cpp:356
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "MOJL v3"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU‑ova Manja opšta javna licenca, verzija 2"
+
+#: lib/kaboutdata.cpp:360
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD"
+
+#: lib/kaboutdata.cpp:361
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD"
+
+#: lib/kaboutdata.cpp:364
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Umetnička"
+
+#: lib/kaboutdata.cpp:365
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Umetnička"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL 1.0"
+
+#: lib/kaboutdata.cpp:369
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q javna licenca"
+
+#: lib/kaboutdata.cpp:372
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "OJL v3"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU‑ova Opšta javna licenca, verzija 3"
+
+#: lib/kaboutdata.cpp:376
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "MOJL v3"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU‑ova Manja opšta javna licenca, verzija 3"
+
+#: lib/kaboutdata.cpp:380
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "MOJL v2.1"
+
+#: lib/kaboutdata.cpp:381
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU‑ova Manja opšta javna licenca, verzija 2.1"
+
+#: lib/kaboutdata.cpp:385
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "(posebna)"
+
+#: lib/kaboutdata.cpp:388
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "(nije navedena)"
+
+#: lib/kaboutdata.cpp:937
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<html><p>O prevodu KDE‑a na srpski jezik možete čitati na stranicama <a "
+"href='http://sr.l10n.kde.org'>sr.l10n.kde.org</a>. Među njima se nalaze <a "
+"href='http://sr.l10n.kde.org/pojmovnik.php'>pojmovnik</a> i <a href='http://"
+"sr.l10n.kde.org/trapnakron/'>trapnakron</a>, koji vam mogu poslužiti da "
+"razjasnite pojmove i povežete prevedene s izvornim izrazima kada god vam to "
+"zatreba.</p><p>Za detaljnije informacije o lokalizaciji KDE‑a uopšte, "
+"posetite <a href='https://l10n.kde.org'>https://l10n.kde.org</a>.</p></html>"
+
+#: lib/kaboutdata.cpp:1165
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Prikaži podatke o autorima."
+
+#: lib/kaboutdata.cpp:1166
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Prikaži podatke o licenci."
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Osnovno ime fajla stavke površi za ovaj program."
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "Ime fajla"
+
+#: lib/kaboutdata.cpp:1178
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Ovaj program je napisao neko ko želi da ostane anoniman."
+
+#: lib/kaboutdata.cpp:1180
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 napisali:"
+
+#: lib/kaboutdata.cpp:1191
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Koristite https://bugs.kde.org za prijavu grešaka."
+
+#: lib/kaboutdata.cpp:1193
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Prijavite greške na %1."
+
+#: lib/plugin/kpluginloader.cpp:122
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Biblioteka %1 ne nudi KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr ""
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr ""
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2,%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1č%2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1č%2m%3,%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1č%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1.%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1.%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1.%2.%3,%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1.%2.%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 dana"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 sati"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minuta"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 sekundi"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n milisekunda"
+msgstr[1] "%n milisekunde"
+msgstr[2] "%n milisekundi"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n dan"
+msgstr[1] "%n dana"
+msgstr[2] "%n dana"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n sat"
+msgstr[1] "%n sata"
+msgstr[2] "%n sati"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minut"
+msgstr[1] "%n minuta"
+msgstr[2] "%n minuta"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n sekunda"
+msgstr[1] "%n sekunde"
+msgstr[2] "%n sekundi"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 i %2"
+
+#: lib/util/kformatprivate.cpp:509
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "loš datum"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "sutra"
+
+#: lib/util/kformatprivate.cpp:521
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "danas"
+
+#: lib/util/kformatprivate.cpp:523
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "juče"
+
+#: lib/util/kformatprivate.cpp:529
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "prošli ponedeljak"
+
+#: lib/util/kformatprivate.cpp:531
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "prošli utorak"
+
+#: lib/util/kformatprivate.cpp:533
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "prošla sreda"
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "prošli četvrtak"
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "prošli petak"
+
+#: lib/util/kformatprivate.cpp:539
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "prošla subota"
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "prošla nedelja"
+
+#: lib/util/kformatprivate.cpp:546
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "idući ponedeljak"
+
+#: lib/util/kformatprivate.cpp:548
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "idući utorak"
+
+#: lib/util/kformatprivate.cpp:550
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "iduća sreda"
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "idući četvrtak"
+
+#: lib/util/kformatprivate.cpp:554
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "idući petak"
+
+#: lib/util/kformatprivate.cpp:556
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "iduća subota"
+
+#: lib/util/kformatprivate.cpp:558
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "iduća nedelja"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# Stefan Asserhäll <stefan.asserhall@bredband.net>, 2014, 2015, 2016, 2017, 2018.
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"PO-Revision-Date: 2018-12-09 18:22+0100\n"
+"Last-Translator: Stefan Asserhäll <stefan.asserhall@bredband.net>\n"
+"Language-Team: Swedish <kde-i18n-doc@kde.org>\n"
+"Language: sv\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Qt-Contexts: true\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Lokalize 2.0\n"
+
+#: lib/kaboutdata.cpp:296
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Inga licensvillkor har angetts för det här programmet.\n"
+"Konsultera dokumentationen eller källkoden för\n"
+"eventuella licensvillkor.\n"
+
+#: lib/kaboutdata.cpp:306
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Det här programmet distribueras under villkoren i %1."
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License Version 2"
+
+#: lib/kaboutdata.cpp:356
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:360
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD-licens"
+
+#: lib/kaboutdata.cpp:361
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD-licens"
+
+#: lib/kaboutdata.cpp:364
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artistisk licens"
+
+#: lib/kaboutdata.cpp:365
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artistisk licens"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public License"
+
+#: lib/kaboutdata.cpp:372
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License Version 3"
+
+#: lib/kaboutdata.cpp:376
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License Version 3"
+
+#: lib/kaboutdata.cpp:380
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:381
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License Version 2.1"
+
+#: lib/kaboutdata.cpp:385
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Egen"
+
+#: lib/kaboutdata.cpp:388
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Inte angiven"
+
+#: lib/kaboutdata.cpp:937
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE översätts till många olika språk tack vare alla översättargrupper "
+"världen över.</p><p>Besök <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a> för mer information om internationalisering av KDE.</p>"
+
+#: lib/kaboutdata.cpp:1165
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Visa information om upphovsman."
+
+#: lib/kaboutdata.cpp:1166
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Visa licensinformation."
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Basfilnamnet på skrivbordsposten för programmet."
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "filnamn"
+
+#: lib/kaboutdata.cpp:1178
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Programmet är skrivet av någon som vill förbli anonym."
+
+#: lib/kaboutdata.cpp:1180
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 är skriven av:"
+
+#: lib/kaboutdata.cpp:1191
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Använd https://bugs.kde.org för att rapportera fel."
+
+#: lib/kaboutdata.cpp:1193
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Rapportera fel till %1."
+
+#: lib/plugin/kpluginloader.cpp:122
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Biblioteket %1 erbjuder inte en KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "y"
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "z"
+
+#: lib/util/kformatprivate.cpp:118
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "a"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "f"
+
+#: lib/util/kformatprivate.cpp:120
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "p"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "µ"
+
+#: lib/util/kformatprivate.cpp:123
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "k"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Ki"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "M"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mi"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Gi"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "T"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ti"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pi"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "E"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ei"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "Z"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Zi"
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:140
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "bit"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B"
+
+#: lib/util/kformatprivate.cpp:146
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Hz"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kbyte"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 Mbyte"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 Gbyte"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 Tbyte"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 Pbyte"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 Ebyte"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 Zbyte"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 Ybyte"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 Kibyte"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 Mibyte"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 Gibyte"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 Tibyte"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 Pibyte"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 Eibyte"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 Zibyte"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 Yibyte"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 Kibyte"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 Mibyte"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 Gibyte"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 Tibyte"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 Pibyte"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 Eibyte"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 Zibyte"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 Yibyte"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1 m %2,%3 s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1 m %2 s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1 t %2 m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1 t %2 m %3,%4 s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1 t %2 m %3 s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 dagar"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 timmar"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minuter"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 sekunder"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n millisekund"
+msgstr[1] "%n millisekunder"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n dag"
+msgstr[1] "%n dagar"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n timme"
+msgstr[1] "%n timmar"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minut"
+msgstr[1] "%n minuter"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n sekund"
+msgstr[1] "%n sekunder"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 och %2"
+
+#: lib/util/kformatprivate.cpp:509
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Ogiltigt datum"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Imorgon"
+
+#: lib/util/kformatprivate.cpp:521
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Idag"
+
+#: lib/util/kformatprivate.cpp:523
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Igår"
+
+#: lib/util/kformatprivate.cpp:529
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Förra måndagen"
+
+#: lib/util/kformatprivate.cpp:531
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "Förra tisdagen"
+
+#: lib/util/kformatprivate.cpp:533
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Förra onsdagen"
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "Förra torsdagen"
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "Förra fredagen"
+
+#: lib/util/kformatprivate.cpp:539
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "Förra lördagen"
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "Förra söndagen"
+
+#: lib/util/kformatprivate.cpp:546
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Nästa måndag"
+
+#: lib/util/kformatprivate.cpp:548
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Nästa tisdag"
+
+#: lib/util/kformatprivate.cpp:550
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Nästa onsdag"
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "Nästa torsdag"
+
+#: lib/util/kformatprivate.cpp:554
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Nästa fredag"
+
+#: lib/util/kformatprivate.cpp:556
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Nästa lördag"
+
+#: lib/util/kformatprivate.cpp:558
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Nästa söndag"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# translation of kdelibs4.po to தமிழ்
+# Copyright (C) 2000,2002, 2004, 2007, 2008 Free Software Foundation, Inc.
+#
+# Sivakumar Shanmugasundaram <sshanmu@yahoo.com>, 2000.
+# Thuraiappah Vaseeharan <t_vasee@yahoo.com>, 2000-2001.
+# ம. ஸ்ரீ ராமதாஸ் | Sri Ramadoss M <amachu@yavarkkum.org>, 2007-2012
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2012-03-25 21:39+0530\n"
+"Last-Translator: Sri Ramadoss M <amachu@yavarkkum.org>\n"
+"Language-Team: Tamil <podhu@madaladal.yavarkkum.org>\n"
+"Language: ta\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Lokalize 1.2\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"இந்த நிரலுக்கான உரிமத் தகவல்கள் குறிப்பிடப்படவில்லை. உரிம விதிகள் பற்றிய\n"
+"தகவல்களுக்கு இந்நிரலின் ஆவணங்களை அல்லது அதன் மூலத்தைப்\n"
+"பார்க்கவும்.\n"
+
+#: lib/kaboutdata.cpp:306
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "%1 விதிகளின் கீழ் இந்நிரல் விநியோகிக்கப்படுகிறது. "
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "குனு பொது மக்கள் உரிமம் வெளியீடு 2"
+
+#: lib/kaboutdata.cpp:356
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "குனு மிதமான பொது மக்கள் உரிமம் வெளியீடு 2"
+
+#: lib/kaboutdata.cpp:360
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD உரிமம்"
+
+#: lib/kaboutdata.cpp:361
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD உரிமம்"
+
+#: lib/kaboutdata.cpp:364
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artistic உரிமம்"
+
+#: lib/kaboutdata.cpp:365
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artistic உரிமம்"
+
+#: lib/kaboutdata.cpp:368
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q பொது உரிமம்"
+
+#: lib/kaboutdata.cpp:372
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License Version 3"
+
+#: lib/kaboutdata.cpp:376
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License Version 3"
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:381
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "குனு மிதமான பொது மக்கள் உரிமம் வெளியீடு 2"
+
+#: lib/kaboutdata.cpp:385
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "தனிப்பட்ட"
+
+#: lib/kaboutdata.cpp:388
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "குறிப்பிடப்படவில்லை"
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE உலகின் எண்ணற்ற மொழிகளில் மொழிபெயர்க்கப்படுகிறது:</p><p>KDE சர்வதேசமயமாக்கம் "
+"பற்றி அறிய<a href=\"http://l10n.kde.org\">http://l10n.kde.org</a></p> "
+
+#: lib/kaboutdata.cpp:1165
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "இயற்றியவரது விவரத்தைக் காட்டுக"
+
+#: lib/kaboutdata.cpp:1166
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "உரிமத் தகவலைக் காட்டுக"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1178
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "தம்மை வெளிப்படுத்திக் கொள்ள விரும்பாத ஒருவரால் இப் பயன்பாடு இயற்றப் பட்டுள்ளது."
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 எழுதியவர்\n"
+"%2 "
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "வழுக்களைத் தாக்கல் செய்ய http://bugs.kde.org பயன்படுத்துக.\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "வழுக்களை %1 க்குத் தெரியப்படுத்தவும்.\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "%1 நிரலகம் கேபசூ 4 க்கு உகந்த பாஃக்டரியினை வழங்கவில்லை"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "முற்பகல்"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "பிற்பகல்"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "முற்பகல்"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "AM"
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "@action"
+#| msgid "Mail"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "மடல்"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "@item Text character set"
+#| msgid "Thai"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "தாய்"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "தொகு"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "சமர்ப்பி"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "முற்பகல்"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3 "
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MiB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GiB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TiB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, fuzzy, qt-format
+#| msgctxt "memory size in 1024 bytes"
+#| msgid "%1 KB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MiB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GiB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TiB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, fuzzy, qt-format
+#| msgctxt "size in 1024 bytes"
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, fuzzy, qt-format
+#| msgctxt "size in 2^20 bytes"
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, fuzzy, qt-format
+#| msgctxt "size in 2^30 bytes"
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, fuzzy, qt-format
+#| msgctxt "size in 2^50 bytes"
+#| msgid "%1 PiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, fuzzy, qt-format
+#| msgctxt "size in 2^60 bytes"
+#| msgid "%1 EiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, fuzzy, qt-format
+#| msgctxt "size in 2^70 bytes"
+#| msgid "%1 ZiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, fuzzy, qt-format
+#| msgctxt "size in 2^80 bytes"
+#| msgid "%1 YiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 TiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 நாட்கள்"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 மணிநேரங்கள்"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 நிமிடங்கள்"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 நொடிகள்"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 மில்லிநொடிகள்"
+msgstr[1] "%1 மில்லிநொடிகள்"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 நாட்கள்"
+msgstr[1] "%1 நாட்கள்"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 மணிநேரங்கள்"
+msgstr[1] "%1 மணிநேரங்கள்"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 நிமிடங்கள்"
+msgstr[1] "%1 நிமிடங்கள்"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 நொடிகள்"
+msgstr[1] "%1 நொடிகள்"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 மற்றும் %2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+#| msgid "Invalid item."
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "செல்லாத உருப்படி."
+
+#: lib/util/kformatprivate.cpp:519
+#, fuzzy
+#| msgctxt "@option tomorrow"
+#| msgid "Tomorrow"
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "நாளை"
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "இன்று"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "நேற்று"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+#| msgctxt "@option last month"
+#| msgid "Last Month"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "அடுத்த மாதம்"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+#| msgctxt "@option last year"
+#| msgid "Last Year"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "கடந்த வருடம்"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+#| msgctxt ""
+#| "referring to a filter on the modification and usage date of files/"
+#| "resources"
+#| msgid "Last Week"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "கடந்தவாரம்"
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+#| msgctxt "@option last year"
+#| msgid "Last Year"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "கடந்த வருடம்"
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+#| msgctxt "@option next month"
+#| msgid "Next Month"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "அடுத்த மாதம்"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "அடுத்த ஆண்டு "
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+#| msgctxt "@option next week"
+#| msgid "Next Week"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "அடுத்த வாரம்"
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "அடுத்த ஆண்டு "
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "அடுத்த ஆண்டு "
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "அடுத்த ஆண்டு "
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, fuzzy, qt-format
+#| msgctxt "City, Country"
+#| msgid "%1, %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# translation of kdelibs4.po to Telugu
+#
+#
+# Purushottam Boyanapalli <boyanapalli@gmail.com>, 2005.
+# విజయ్ కిరణ్ కముజు <infyquest@gmail.com>, 2007.
+# pavithran <pavithran.s@gmail.com>, 2007.
+# Krishna Babu K <kkrothap@redhat.com>, 2008, 2009.
+# sreekalyanbapatla <sreekalyan3@gmail.com>, 2013.
+# GVS.Giri <gvs.giri@swecha.net>, 2013.
+# Bhuvan Krishna <bhuvan@swecha.org>,2013.
+# Naveen Kandimalla <naveen@swecha.net>,2013.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2013-11-04 23:55+0630\n"
+"Last-Translator: Bhuvan Krishna <bhuvan@swecha.org>\n"
+"Language-Team: Telugu <kde-i18n-doc@kde.org>\n"
+"Language: te\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.5\n"
+"Plural-Forms: nplurals=5; plural=n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : "
+"4;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"ఈ ప్రోగ్రామ్కు లైసెన్స్ షరతులు పేర్కొనలేవు.\n"
+"దయచేసి లైసెన్స్ షరతుల కొరకు పత్రరచన లేక మూలంను \n"
+"సంప్రదించండి.\n"
+
+#: lib/kaboutdata.cpp:306
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "ఈ ప్రోగ్రామ్ %1 షరతుల క్రింద పంచిపెట్టడమైనది."
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License Version 2"
+
+#: lib/kaboutdata.cpp:356
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:360
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD License"
+
+#: lib/kaboutdata.cpp:361
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD License"
+
+#: lib/kaboutdata.cpp:364
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "ఆర్టిస్టిక్ లైసెన్స్"
+
+#: lib/kaboutdata.cpp:365
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "ఆర్టిస్టిక్ లైసెన్స్"
+
+#: lib/kaboutdata.cpp:368
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "క్యు పబ్లిక్ లైసెన్స్"
+
+#: lib/kaboutdata.cpp:372
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "గ్ను సాధారణ పబ్లిక్ లైసెన్స్ వివరణం 3"
+
+#: lib/kaboutdata.cpp:376
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "గ్ను తక్కువ సాధారణ పబ్లిక్ లైసెన్స్ వివరణం 3"
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:381
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:385
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "నిర్దేశితమైన"
+
+#: lib/kaboutdata.cpp:388
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "ఏమి ఇవ్వబడలేదు"
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"కెడిఈ తెలుగు అనువాదం జట్టు సమాచారం కొరకు ఈ వెబ్ సైట్ ను చూడండి<a href=\"http://www.swecha."
+"org\">స్వేచ్ఛ</a>"
+
+#: lib/kaboutdata.cpp:1165
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "మూలకర్త సమాచారం చూపుము"
+
+#: lib/kaboutdata.cpp:1166
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "లైసెన్స్ సమాచరం చూపుము"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1178
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "ఈ కార్యక్రమాన్ని వ్రాసినవారు అజ్ఞాతంగా వుండదలచుకున్నారు"
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 ను వ్రాసింది\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "తప్పులను తెలియచేయుటకు http://bugs.kde.orgని వాడండి.\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "%1 కు తప్పులను తెలియచేయండి.\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "%1 లైబ్రరిలో కెడిఈ 4 కి సరిపడె ఫేక్టరి లేదు"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "పూర్వాహ్నము"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "మధ్యాహ్నము"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "పూర్వాహ్నము"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "ఖా"
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "య"
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "మే"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "తిర్"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "పి "
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "పి "
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "సరిదిద్దు"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "అందించు"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "పూర్వాహ్నము"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 "
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 కె"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 యంబి"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 జి"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 టి"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 పి"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 ఇ"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 Z"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 y"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 "
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, fuzzy, qt-format
+#| msgctxt "memory size in 1024 bytes"
+#| msgid "%1 KB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 కె"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 యంబి"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 జి"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 టి"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 పి"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 ఇ"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 Z"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 y"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 "
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, fuzzy, qt-format
+#| msgctxt "size in 1024 bytes"
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 కె"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, fuzzy, qt-format
+#| msgctxt "size in 2^20 bytes"
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 యం"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, fuzzy, qt-format
+#| msgctxt "size in 2^30 bytes"
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 జి"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 టి"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, fuzzy, qt-format
+#| msgctxt "size in 2^50 bytes"
+#| msgid "%1 PiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 పి"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, fuzzy, qt-format
+#| msgctxt "size in 2^60 bytes"
+#| msgid "%1 EiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 ఇఐబి"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, fuzzy, qt-format
+#| msgctxt "size in 2^70 bytes"
+#| msgid "%1 ZiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 జ్ఐ"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, fuzzy, qt-format
+#| msgctxt "size in 2^80 bytes"
+#| msgid "%1 YiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 yఐ"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 రొజు"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 గంట"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 నిమిష"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 సెక"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 మిల్లిసెకనుడు"
+msgstr[1] "%1 మిల్లిసెకనుడు"
+msgstr[2] "%1 మిల్లిసెకనుడు"
+msgstr[3] "%1 మిల్లిసెకనుడు"
+msgstr[4] "%1 మిల్లిసెకనుడు"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 రొజు"
+msgstr[1] "%1 రొజు"
+msgstr[2] "%1 రొజు"
+msgstr[3] "%1 రొజు"
+msgstr[4] "%1 రొజు"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 గంట"
+msgstr[1] "%1 గంట"
+msgstr[2] "%1 గంట"
+msgstr[3] "%1 గంట"
+msgstr[4] "%1 గంట"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 నిమిష"
+msgstr[1] "%1 నిమిష"
+msgstr[2] "%1 నిమిష"
+msgstr[3] "%1 నిమిష"
+msgstr[4] "%1 నిమిష"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 సెక"
+msgstr[1] "%1 సెక"
+msgstr[2] "%1 సెక"
+msgstr[3] "%1 సెక"
+msgstr[4] "%1 సెక"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 మరియు %2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+#| msgid "Invalid item."
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "వస్తువు నిస్సారం"
+
+#: lib/util/kformatprivate.cpp:519
+#, fuzzy
+#| msgctxt "@option tomorrow"
+#| msgid "Tomorrow"
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "మరుసటిరో"
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "ఈరొజు"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "నిన్న"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+#| msgctxt "@option last month"
+#| msgid "Last Month"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "చివరి నె"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "మంగళవారం"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "బుధవారం"
+
+#: lib/util/kformatprivate.cpp:535
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "గురువారం"
+
+#: lib/util/kformatprivate.cpp:537
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "శుక్రవారం"
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "శనివారం"
+
+#: lib/util/kformatprivate.cpp:541
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "ఆదివారం"
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+#| msgctxt "@option next month"
+#| msgid "Next Month"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "వచ్చే నెల"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "మంగళవారం"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "బుధవారం"
+
+#: lib/util/kformatprivate.cpp:552
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "గురువారం"
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "శుక్రవారం"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "శనివారం"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "ఆదివారం"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, fuzzy, qt-format
+#| msgctxt "City, Country"
+#| msgid "%1, %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1,%2"
--- /dev/null
+# translation of kdelibs4.po to Tajik Language
+# 2004, 2005, 2006, 2007 infoDev, a World Bank organization.
+# 2004, 2005, 2006, 2007 Khujand Computer Technologies, Inc.
+# 2004, 2005, 2006, 2007 Youth Opportunities, NGO, 2005.
+# Roger Kovacs <rkovacs@khujand.org>, 2003.
+# Thomas Diehl <thd@kde.org>, 2003.
+# Akmal Vatanshoev <akmalvatanshoev@yahoo.com>, 2004.
+# Victor Ibragimov <youth_opportunities@tajikngo.org>, 2003, 2004, 2005, 2006, 2007, 2008.
+# Copyright (C) 2004, 2002, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2013-06-04 17:36+0500\n"
+"Last-Translator: Victor Ibragimov <victor.ibragimov@gmail.com>\n"
+"Language-Team: Tajik Language\n"
+"Language: tg\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.5.4\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Барои истифодабарии ин барнома, ягон шарти иҷозатнома монда нашудааст.\n"
+"Барои гирифтани маълумоти муфассал оиди шарту шароит, ҳуҷҷатҳои барномаро "
+"истифода баред.\n"
+
+#: lib/kaboutdata.cpp:306
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Ин барнома ба воситаи шароити %1 паҳн шудааст."
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License. Версияи 2"
+
+#: lib/kaboutdata.cpp:356
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:360
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Иҷозатномаи BSD"
+
+#: lib/kaboutdata.cpp:361
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Иҷозатномаи BSD"
+
+#: lib/kaboutdata.cpp:364
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Шартномаи Artistic"
+
+#: lib/kaboutdata.cpp:365
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Шартномаи Artistic"
+
+#: lib/kaboutdata.cpp:368
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Шартномаи Ҷамъиятии Q"
+
+#: lib/kaboutdata.cpp:372
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License Version 3"
+
+#: lib/kaboutdata.cpp:376
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License Version 3"
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:381
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:385
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Дигар"
+
+#: lib/kaboutdata.cpp:388
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Муайян нашудааст"
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>Ташаккур гуфта ба ҳамаи гурӯҳҳои тарҷумонҳо аз тамоми дунё, KDE ба бисер "
+"забонҳо тарҷума карда шуд.</p><p>Барои гирифтани маълумоти муфассал оиди "
+"интернатсионалӣ шуморидани KDE, суроғаи <a href=\"http://www.kde.tj\">http://"
+"www.kde.tj</a> истифода баред. Мумкин аст, ки шумо мехоҳед бо гурӯҳи "
+"тарҷумонҳои тоҷикиро ҳамкорӣ кунед, ин тавр ба почтаи электронии "
+"youth_opportunities@tajikngo.org мактубро нависед.</p>"
+
+#: lib/kaboutdata.cpp:1165
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Намоиши иттилооти муаллиф"
+
+#: lib/kaboutdata.cpp:1166
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Намоиши иттилооти иҷозатнома"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1178
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Муаллифи нн барнома худро номаълум монд."
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 навишта буд бо\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr ""
+"Барои маълумот додани хатогиҳои барнома, ин суроғаро истифода баред: http://"
+"bugs.kde.org to report bugs.\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr ""
+"Барои маълумот додани хатогиҳои барнома, ин алоқаро истифода баред: %1.\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Китобхонаи %1 механизми компонетҳои KDE 4 дастрас намекунад."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "pm"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgctxt "Coptic month 4 - ShortName"
+#| msgid "Kia"
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Kha"
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "AM"
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "Ethiopian month 8 - ShortName"
+#| msgid "Miy"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Май"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Тир"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Таҳрир"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Ирсол"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 Б"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 кБ"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 МБ"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 ГБ"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 ТБ"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 ПБ"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 ИБ"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ЗБ"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 ЮБ"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 Б"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, fuzzy, qt-format
+#| msgctxt "memory size in 1024 bytes"
+#| msgid "%1 KB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 КБ"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 МБ"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 ГБ"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 ТБ"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 ПБ"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 ИБ"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ЗБ"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 ЮБ"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 Б"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, fuzzy, qt-format
+#| msgctxt "size in 1024 bytes"
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 КБ"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, fuzzy, qt-format
+#| msgctxt "size in 2^20 bytes"
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 МиБ"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, fuzzy, qt-format
+#| msgctxt "size in 2^30 bytes"
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 ГиБ"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 ТиБ"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 PiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 ПиБ"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, fuzzy, qt-format
+#| msgctxt "size in 2^50 bytes"
+#| msgid "%1 EiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 ИеБ"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, fuzzy, qt-format
+#| msgctxt "size in 2^60 bytes"
+#| msgid "%1 ZiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ЗиБ"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, fuzzy, qt-format
+#| msgctxt "size in 2^70 bytes"
+#| msgid "%1 YiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 ЮиБ"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 рӯз"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 соат"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 дақиқа"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 сония"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 миллисония"
+msgstr[1] "%1 миллисония"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 рӯз"
+msgstr[1] "%1 рӯз"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 соат"
+msgstr[1] "%1 соат"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 дақиқа"
+msgstr[1] "%1 дақиқа"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 сония"
+msgstr[1] "%1 сония"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 ва %2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+#| msgid "Invalid item."
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Чизи нодуруст."
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Имрӯз"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Дирӯз"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+#| msgctxt "@option last month"
+#| msgid "Last Month"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Моҳи гузашта"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "Сешанбе"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Чоршанбе"
+
+#: lib/util/kformatprivate.cpp:535
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "Панҷшанбе"
+
+#: lib/util/kformatprivate.cpp:537
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "Ҷумъа"
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "Шанбе"
+
+#: lib/util/kformatprivate.cpp:541
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "Якшанбе"
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+#| msgctxt "@option next month"
+#| msgid "Next Month"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Моҳи оянда"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Сешанбе"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Чоршанбе"
+
+#: lib/util/kformatprivate.cpp:552
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "Панҷшанбе"
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Ҷумъа"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Шанбе"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Якшанбе"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "%1 is 'the slot asked for foo arguments', %2 is 'but there are only bar "
+#| "available'"
+#| msgid "%1, %2."
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1 и %2."
--- /dev/null
+# translation of kdelibs4.po to Thai
+# Copyright (C) 2003,2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+#
+# Thanomsub Noppaburana <donga_n@yahoo.com>, 2003,2004, 2005.
+# Thanomsub Noppaburana <donga.nb@gmail.com>, 2005, 2008, 2010.
+# Sahachart Anukulkitch <drrider@gmail.com>, 2006, 2007.
+# Narachai Sakorn <narachai@gmail.com>, 2008.
+# Phuwanat Sakornsakolpat <narachai@gmail.com>, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2010-12-31 22:47+0700\n"
+"Last-Translator: Phuwanat Sakornsakolpat <narachai@gmail.com>\n"
+"Language-Team: Thai <thai-l10n@googlegroups.com>\n"
+"Language: th\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.0\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"ไม่พบสัญญาอนุญาตของโปรแกรมนี้\n"
+"โปรดตรวจสอบเอกสารหรือต้นฉบับโปรแกรม\n"
+"เกี่ยวกับสัญญาอนุญาตในการใช้งาน\n"
+
+#: lib/kaboutdata.cpp:306
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "โปรแกรมนี้แจกจ่ายและเผยแพร่ภายใต้เงื่อนไข %1"
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "แบบ GPL รุ่น 2"
+
+#: lib/kaboutdata.cpp:353
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "สัญญาอนุญาตแบบ GNU - GPL รุ่น 2"
+
+#: lib/kaboutdata.cpp:356
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "แบบ LGPL รุ่น 2"
+
+#: lib/kaboutdata.cpp:357
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "สัญญาอนุญาตแบบ GNU - LGPL รุ่น 2"
+
+#: lib/kaboutdata.cpp:360
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "สัญญาอนุญาตแบบ BSD"
+
+#: lib/kaboutdata.cpp:361
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "สัญญาอนุญาตแบบ BSD"
+
+#: lib/kaboutdata.cpp:364
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "สัญญาอนุญาตแบบ Artistic"
+
+#: lib/kaboutdata.cpp:365
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "สัญญาอนุญาตแบบ Artistic"
+
+#: lib/kaboutdata.cpp:368
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "แบบ QPL รุ่น 1.0"
+
+#: lib/kaboutdata.cpp:369
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "สัญญาอนุญาตสาธารณะแบบ Q"
+
+#: lib/kaboutdata.cpp:372
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "แบบ GPL รุ่น 3"
+
+#: lib/kaboutdata.cpp:373
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "สัญญาอนุญาตแบบ GNU - GPL รุ่น 3"
+
+#: lib/kaboutdata.cpp:376
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "แบบ LGPL รุ่น 3"
+
+#: lib/kaboutdata.cpp:377
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "สัญญาอนุญาตแบบ GNU - LGPL รุ่น 3"
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "แบบ LGPL รุ่น 2"
+
+#: lib/kaboutdata.cpp:381
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "สัญญาอนุญาตแบบ GNU - LGPL รุ่น 2"
+
+#: lib/kaboutdata.cpp:385
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "กำหนดเอง"
+
+#: lib/kaboutdata.cpp:388
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "ยังไม่ระบุ"
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>ขอขอบคุณสำหรับการทำงานของทีมแปลภาษาทั่วโลก ในการแปล KDE เป็นภาษาต่าง ๆ มากมาย</"
+"p> <p>สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับการทำให้ KDE เป็นภาษาชาติต่าง ๆ สามารถดูได้ที่เว็บไซต์ "
+"<a href=\"http://l10n.kde.org\">http://l10n.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1165
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "แสดงข้อมูลของผู้เขียน"
+
+#: lib/kaboutdata.cpp:1166
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "แสดงข้อมูลสัญญาอนุญาต"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1178
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "โปรแกรมนี้เขียนขึ้นโดยผู้ไม่ประสงค์จะออกนาม"
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 ถูกเขียนขึ้นโดย\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "โปรดไปยังเว็บไซต์ http://bugs.kde.org เพื่อรายงานข้อผิดพลาด\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "โปรดรายงานข้อผิดพลาดไปยัง %1\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "ไลบรารี %1 ไม่ได้ให้ส่วนที่เข้ากันได้กับแฟคทอรีของ KDE 4 มาด้วย"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "pm"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "พฤ."
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "พ.ค."
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tir"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "แก้ไข"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "ส่งข้อมูล"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 ไบต์"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 กิโลไบต์"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 เมกะไบต์"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 กิกะไบต์"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 เทระไบต์"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 เพตะไบต์"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 เอกซะไบต์"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 เซตะไบต์"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 ยอตตะไบต์"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 ไบต์"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, fuzzy, qt-format
+#| msgctxt "memory size in 1024 bytes"
+#| msgid "%1 KB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 กิโลไบต์"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 เมกะไบต์"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 กิกะไบต์"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 เทระไบต์"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 เพตะไบต์"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 เอกซะไบต์"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 เซตะไบต์"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 ยอตตะไบต์"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 ไบต์"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, fuzzy, qt-format
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 กิโลไบต์"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 เมกะไบต์"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 กิกะไบต์"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 เทระไบต์"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 เพตะไบต์"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 เอกซะไบต์"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 เซตะไบต์"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 ยอตตะไบต์"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 วัน"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 ชั่วโมง"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 นาที"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 วินาที"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 มิลลิวินาที"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 วัน"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 ชั่วโมง"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 นาที"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 วินาที"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 %2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+#| msgid "Invalid item."
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "รายการใช้งานไม่ได้"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "วันนี้"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "เมื่อวานนี้"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "เดือนก่อน"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "อังคาร"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "พุธ"
+
+#: lib/util/kformatprivate.cpp:535
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "พฤหัสบดี"
+
+#: lib/util/kformatprivate.cpp:537
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "ศุกร์"
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "เสาร์"
+
+#: lib/util/kformatprivate.cpp:541
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "อาทิตย์"
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "เดือนถัดไป"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "อังคาร"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "พุธ"
+
+#: lib/util/kformatprivate.cpp:552
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "พฤหัสบดี"
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "ศุกร์"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "เสาร์"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "อาทิตย์"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, fuzzy, qt-format
+#| msgctxt "City, Country"
+#| msgid "%1, %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# translation of kdelibs4.po to Turkish
+# translation of kdelibs4.po to
+# Kdelibs Turkish translation file
+# Copyright (C) 2000,2003, 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+#
+# Ömer Fadıl USTA <omer_fad@hotmail.com>,1999-2002.
+# Görkem Çetin <gorkem@kde.org>, 2002,2003, 2004.
+# Tuncay YENİAY <tuncayyeniay@mynet.com>,2002.
+# Ayşe Genç <ayse@uludag.org.tr>, 2005.
+# Görkem Çetin <gorkem@kde.org.tr>, 2005.
+# Görkem Çetin <gorkem@gorkemcetin.com>, 2005.
+# Bekir SONAT <cortexbs@yahoo.com>, 2005.
+# Serdar Soytetir <tulliana@gmail.com>, 2007.
+# Serdar Soytetir <tulliana@gmail.com>, 2007, 2008, 2009, 2011.
+# H. İbrahim Güngör <ibrahim@pardus.org.tr>, 2010, 2011.
+# Ozan Çağlayan <ozan@pardus.org.tr>, 2010, 2011.
+# Serdar SOYTETİR <tulliana@gmail.com>, 2010, 2012.
+# Volkan Gezer <volkangezer@gmail.com>, 2013, 2014, 2015, 2017.
+# Kaan Ozdincer <kaanozdincer@gmail.com>, 2014.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2017-10-23 09:52+0000\n"
+"Last-Translator: İşbaran <isbaran@gmail.com>\n"
+"Language-Team: Turkish <kde-l10n-tr@kde.org>\n"
+"Language: tr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"X-Generator: Lokalize 2.0\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Bu program için bir lisans koşulu verilmemiş.\n"
+"Lütfen lisans bilgisi için belgelendirmeyi veya kaynak kodu\n"
+"kontrol edin.\n"
+
+#: lib/kaboutdata.cpp:306
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Bu program %1 lisansı altında dağıtılmaktadır."
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU Genel Kamu Lisansı Sürüm 2"
+
+#: lib/kaboutdata.cpp:356
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Kısıtlı Genel Kamu Lisansı Sürüm 2"
+
+#: lib/kaboutdata.cpp:360
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD Lisansı"
+
+#: lib/kaboutdata.cpp:361
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD Lisansı"
+
+#: lib/kaboutdata.cpp:364
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Sanatsal Lisans"
+
+#: lib/kaboutdata.cpp:365
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Sanatsal Lisans"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Kamu Lisansı"
+
+#: lib/kaboutdata.cpp:372
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU Genel Kamu Lisansı Sürüm 3"
+
+#: lib/kaboutdata.cpp:376
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Kısıtlı Genel Kamu Lisansı Sürüm 3"
+
+#: lib/kaboutdata.cpp:380
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:381
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Kısıtlı Genel Kamu Lisansı Sürüm 2.1"
+
+#: lib/kaboutdata.cpp:385
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Özel"
+
+#: lib/kaboutdata.cpp:388
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Belirtilmemiş"
+
+#: lib/kaboutdata.cpp:937
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE birçok dile çevrilmiştir, dünyanın dört bir yanındaki çeviri "
+"ekiplerine çalışmaları için teşekkür ederiz.</p><p>KDE "
+"uluslararasılaştırılması hakkında daha fazla bilgi almak için <a href="
+"\"http://l10n.kde.org\">http://l10n.kde.org</a> adresini ziyaret edin.</p>"
+
+#: lib/kaboutdata.cpp:1165
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Yazar bilgisini göster."
+
+#: lib/kaboutdata.cpp:1166
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Lisans bilgisini göster."
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Bu uygulama için masaüstü girdisinin temel dosya adı."
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "dosya ismi"
+
+#: lib/kaboutdata.cpp:1178
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Bu uygulama isminin gizli kalmasını isteyen birisi tarafından yazıldı."
+
+#: lib/kaboutdata.cpp:1180
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 programının yazarı:"
+
+#: lib/kaboutdata.cpp:1191
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Lütfen hataları bildirmek için http://bugs.kde.org adresini kullanın."
+
+#: lib/kaboutdata.cpp:1193
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Lütfen hataları %1 adresine bildirin."
+
+#: lib/plugin/kpluginloader.cpp:122
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "%1 kitaplığı bir KPluginFactory sunmuyor."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "öö"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "ös"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "öö"
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Ok"
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "Tamam"
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgctxt "Coptic month 4 - ShortName"
+#| msgid "Kia"
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Kia"
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "ÖÖ"
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "Ethiopian month 8 - ShortName"
+#| msgid "Miy"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Miy"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tir"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "Coptic weekday 4 - ShortDayName"
+#| msgid "Pti"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pti"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Düzenle"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Gönder"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "öö"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2.%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h%2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2m%3.%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1s%2d%3sn"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 gün"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 saat"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 dakika"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 saniye"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n milisaniye"
+msgstr[1] "%n milisaniye"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n gün"
+msgstr[1] "%n gün"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n saat"
+msgstr[1] "%n saat"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n dakika"
+msgstr[1] "%n dakika"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n saniye"
+msgstr[1] "%n saniye"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 ve %2"
+
+#: lib/util/kformatprivate.cpp:509
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Geçersiz tarih"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Yarın"
+
+#: lib/util/kformatprivate.cpp:521
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Bugün"
+
+#: lib/util/kformatprivate.cpp:523
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Dün"
+
+#: lib/util/kformatprivate.cpp:529
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Geçen Pazartesi"
+
+#: lib/util/kformatprivate.cpp:531
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "Geçen Salı"
+
+#: lib/util/kformatprivate.cpp:533
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Geçen Çarşamba"
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "Geçen Perşembe"
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "Geçen Cuma"
+
+#: lib/util/kformatprivate.cpp:539
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "Geçen Cumartesi"
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "Geçen Pazar"
+
+#: lib/util/kformatprivate.cpp:546
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Gelecek Pazartesi"
+
+#: lib/util/kformatprivate.cpp:548
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Gelecek Salı"
+
+#: lib/util/kformatprivate.cpp:550
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Gelecek Çarşamba"
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "Gelecek Perşembe"
+
+#: lib/util/kformatprivate.cpp:554
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Gelecek Cuma"
+
+#: lib/util/kformatprivate.cpp:556
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Gelecek Cumartesi"
+
+#: lib/util/kformatprivate.cpp:558
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Gelecek Pazar"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Ainur Shakirov <ainur.shakirov.tt@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2011-11-26 15:12+0400\n"
+"Last-Translator: Ainur Shakirov <ainur.shakirov.tt@gmail.com>\n"
+"Language-Team: Tatar <>\n"
+"Language: tt\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Lokalize 1.2\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Бу кушымтада лицензия күрсәтелмәгән.\n"
+"Бәлки, ул кушымтаның документациясендә яки чыганаклы текстларында "
+"күрсәтелгәндер.\n"
+
+#: lib/kaboutdata.cpp:306
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Кушымта %1 шартларында таратыла."
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License, 2-нче юрамасы"
+
+#: lib/kaboutdata.cpp:356
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License, 2-нче юрамасы"
+
+#: lib/kaboutdata.cpp:360
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD лицензиясе"
+
+#: lib/kaboutdata.cpp:361
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD лицензиясе"
+
+#: lib/kaboutdata.cpp:364
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artistic License"
+
+#: lib/kaboutdata.cpp:365
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artistic License"
+
+#: lib/kaboutdata.cpp:368
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public License"
+
+#: lib/kaboutdata.cpp:372
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License, 3-нче юрамасы"
+
+#: lib/kaboutdata.cpp:376
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License, 3-нче юрамасы"
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:381
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License, 2-нче юрамасы"
+
+#: lib/kaboutdata.cpp:385
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Өстәмә"
+
+#: lib/kaboutdata.cpp:388
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Лицензия күрсәтелмәгән"
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE исемле график чолганышы төрле илләрдә яшәүче тәрҗемәчеләр төркемнәре "
+"ярдәмендә күп телләргә тәрҗемә ителгән.</p><p>KDE проектының тәрҗемә итү "
+"турында күбрәк мәгълумат алу өчен <a href=\"http://l10n.kde.org\">l10n.kde."
+"org</a> сәхифәсенә мөрәҗәгать итегез.</p>"
+
+#: lib/kaboutdata.cpp:1165
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Автор турында мәгълүматны күрсәтү"
+
+#: lib/kaboutdata.cpp:1166
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Лицензия турында мәгълүматны күрсәтү"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1178
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Кушымтаның авторы билгесез булып калырга теләде."
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 яздылар:\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Хаталар турында хәбәрләр өчен http://bugs.kde.org белән кулланыгыз.\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Хаталар турында хәбәрләр өчен %1 белән кулланыгыз.\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "%1 китапханәсе KDE4 чолганышына туры килүче компонентларын ясый алмый."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "pm"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "ТК"
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "@action"
+#| msgid "Mail"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Почта"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "@item Text character set"
+#| msgid "Thai"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Тай"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "С"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "С"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Үзгәртү"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Бәяләмә өчен тапшыру"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 Б"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 кБ"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 МБ"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 ГБ"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 ТБ"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 ПБ"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 ЭБ"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ЗБ"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 ЙБ"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 Б"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, fuzzy, qt-format
+#| msgctxt "memory size in 1024 bytes"
+#| msgid "%1 KB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 КБ"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 МБ"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 ГБ"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 ТБ"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 ПБ"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 ЭБ"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ЗБ"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 ЙБ"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 Б"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, fuzzy, qt-format
+#| msgctxt "size in 1024 bytes"
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 КиБ"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, fuzzy, qt-format
+#| msgctxt "size in 2^20 bytes"
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 МиБ"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, fuzzy, qt-format
+#| msgctxt "size in 2^30 bytes"
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 ГиБ"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 ТиБ"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, fuzzy, qt-format
+#| msgctxt "size in 2^50 bytes"
+#| msgid "%1 PiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 ПиБ"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, fuzzy, qt-format
+#| msgctxt "size in 2^60 bytes"
+#| msgid "%1 EiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 ЭиБ"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, fuzzy, qt-format
+#| msgctxt "size in 2^70 bytes"
+#| msgid "%1 ZiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ЗиБ"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, fuzzy, qt-format
+#| msgctxt "size in 2^80 bytes"
+#| msgid "%1 YiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 ЙиБ"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 көн"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 сәгать"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 минут"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 секунд"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 миллисекунд"
+msgstr[1] "%1 миллисекунд"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 көн"
+msgstr[1] "%1 көн"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 сәгать"
+msgstr[1] "%1 сәгать"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 минут"
+msgstr[1] "%1 минут"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 секунд"
+msgstr[1] "%1 секунд"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 %2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+#| msgid "Invalid item."
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Тотылмаган элемент."
+
+#: lib/util/kformatprivate.cpp:519
+#, fuzzy
+#| msgctxt "@option tomorrow"
+#| msgid "Tomorrow"
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Иртәгә"
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Бүген"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Кичә"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+#| msgctxt "@option last month"
+#| msgid "Last Month"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Ахыргы ай"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+#| msgctxt "@option last year"
+#| msgid "Last Year"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "Ахыргы ел"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+#| msgctxt ""
+#| "referring to a filter on the modification and usage date of files/"
+#| "resources"
+#| msgid "Last Week"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Ахыргы атна"
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+#| msgctxt "@option last year"
+#| msgid "Last Year"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "Ахыргы ел"
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+#| msgctxt "@option next month"
+#| msgid "Next Month"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Киләсе ай"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Киләсе ел"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+#| msgctxt "@option next week"
+#| msgid "Next Week"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Следующая неделя"
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Киләсе ел"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Киләсе ел"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Киләсе ел"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, fuzzy, qt-format
+#| msgctxt "City, Country"
+#| msgid "%1, %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# Uyghur translation for kdelibs4.
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+# Sahran <sahran.ug@gmail.com>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2013-09-08 07:05+0900\n"
+"Last-Translator: Gheyret Kenji <gheyret@gmail.com>\n"
+"Language-Team: Uyghur Computer Science Association <UKIJ@yahoogroups.com>\n"
+"Language: ug\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Poedit 1.5.5\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"بۇ پروگراممىغا ئىجازەت كېلىشىمى بەلگىلەنمىگەن.\n"
+"پۈتۈك ياكى ئەسلى ھۆججەتنى تەكشۈرۈپ ئىجازەت كېلىشىمى بار يوقلۇقىنى تەكشۈرۈڭ.\n"
+
+#: lib/kaboutdata.cpp:306
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "بۇ پروگرامما %1 ئىجازەت كېلىشىمى ئاساسىدا تارقىتىلىدۇ."
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU ئادەتتىكى ئاممىۋى ئىجازەت كېلىشىمى 2- نەشرى"
+
+#: lib/kaboutdata.cpp:356
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU كەڭرىرەك ئادەتتىكى ئاممىۋى ئىجازەت كېلىشىمى 2- نەشرى"
+
+#: lib/kaboutdata.cpp:360
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD ئىجازەتنامە"
+
+#: lib/kaboutdata.cpp:361
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD ئىجازەتنامە"
+
+#: lib/kaboutdata.cpp:364
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artistic ئىجازەتنامە"
+
+#: lib/kaboutdata.cpp:365
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artistic ئىجازەتنامە"
+
+#: lib/kaboutdata.cpp:368
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q ئاممىۋى ئىجازەتنامە (QPL)"
+
+#: lib/kaboutdata.cpp:372
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU ئادەتتىكى ئاممىۋى ئىجازەت كېلىشىمى 3- نەشرى"
+
+#: lib/kaboutdata.cpp:376
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU كەڭرىرەك ئادەتتىكى ئاممىۋى ئىجازەت كېلىشىمى 3- نەشرى"
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:381
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU كەڭرىرەك ئادەتتىكى ئاممىۋى ئىجازەت كېلىشىمى 2- نەشرى"
+
+#: lib/kaboutdata.cpp:385
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "ئىختىيارى"
+
+#: lib/kaboutdata.cpp:388
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "بەلگىلەنمىگەن"
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>دۇنيانىڭ ھەر قايسى جايلىرىدىكى تەرجىمە گۇرۇپپىلىرىنىڭ جاپالىق ئەمگىكىگە "
+"كۆپ رەھمەت، KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"http://l10n.kde.org\">http://l10n.kde."
+"org</a></p>"
+
+#: lib/kaboutdata.cpp:1165
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "يازغۇچى ئۇچۇرىنى كۆرسەت"
+
+#: lib/kaboutdata.cpp:1166
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "ئىجازەت ئۇچۇرىنى كۆرسەت"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1178
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "بۇ پروگرامما ئاتىنى ئاشكارىلاشنى خالىمىغان كىشى تەرىپىدىن يېزىلغان."
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 نى يازغانلار\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "كەمتۈكلەرنى http://bugs.kde.org غا مەلۇم قىلىڭ.\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "كەمتۈكلەرنى %1 غا مەلۇم قىلىڭ.\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "%1 ئامبار KDE 4 بىلەن ماسلىشىدىغان زاۋۇت تەمىنلىمىگەن."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "چ ب"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "چ ك"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "چ ب"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "چ ب"
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "@action"
+#| msgid "Mail"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "خەت"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "@item Text character set"
+#| msgid "Thai"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "تايلاندچە"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "تەھرىرلەش"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "تاپشۇر"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "چ ب"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 بايت"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 كىلوبايت"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 مېگابايت"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 گ ب"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 تېرابايت"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 پېتابايت"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 ئېكسابايت"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 بايت"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, fuzzy, qt-format
+#| msgctxt "memory size in 1024 bytes"
+#| msgid "%1 KB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 كب"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 مېگابايت"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 گ ب"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 تېرابايت"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 پېتابايت"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 ئېكسابايت"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 بايت"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, fuzzy, qt-format
+#| msgctxt "size in 1024 bytes"
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 كىلوبايت"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, fuzzy, qt-format
+#| msgctxt "size in 2^20 bytes"
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 مېگابايت"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, fuzzy, qt-format
+#| msgctxt "size in 2^30 bytes"
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 گىگابايت"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 تېرابايت"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, fuzzy, qt-format
+#| msgctxt "size in 2^50 bytes"
+#| msgid "%1 PiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 پېتابايت"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, fuzzy, qt-format
+#| msgctxt "size in 2^60 bytes"
+#| msgid "%1 EiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 ئېكسابايت"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, fuzzy, qt-format
+#| msgctxt "size in 2^70 bytes"
+#| msgid "%1 ZiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 زېتتابايت"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, fuzzy, qt-format
+#| msgctxt "size in 2^80 bytes"
+#| msgid "%1 YiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 يوتتابايت"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 كۈن"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 سائەت"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 مىنۇت"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 سېكۇنت"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 مىللىسېكۇنت"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 كۈن"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 سائەت"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 مىنۇت"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 سېكۇنت"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 ۋە %2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+#| msgid "Invalid item."
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "ئىناۋەتسىز تۈر."
+
+#: lib/util/kformatprivate.cpp:519
+#, fuzzy
+#| msgctxt "@option tomorrow"
+#| msgid "Tomorrow"
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "ئەتە"
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "بۈگۈن"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "تۈنۈگۈن"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+#| msgctxt "@option last month"
+#| msgid "Last Month"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "ئوتكەن ئاي"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+#| msgctxt "@option last year"
+#| msgid "Last Year"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "ئۆتكەن يىل"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+#| msgctxt ""
+#| "referring to a filter on the modification and usage date of files/"
+#| "resources"
+#| msgid "Last Week"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "ئۆتكەن ھەپتە"
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+#| msgctxt "@option last year"
+#| msgid "Last Year"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "ئۆتكەن يىل"
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+#| msgctxt "@option next month"
+#| msgid "Next Month"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "كېيىنكى ئاي"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "كېيىنكى يىل"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+#| msgctxt "@option next week"
+#| msgid "Next Week"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "كېيىنكى ھەپتە"
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "كېيىنكى يىل"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "كېيىنكى يىل"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Next year"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "كېيىنكى يىل"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, fuzzy, qt-format
+#| msgctxt "City, Country"
+#| msgid "%1, %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1، %2"
--- /dev/null
+# Translation of kcoreaddons5_qt.po to Ukrainian
+# Copyright (C) 2018 This_file_is_part_of_KDE
+# This file is distributed under the license LGPL version 2.1 or
+# version 3 or later versions approved by the membership of KDE e.V.
+#
+# Eugene Onischenko <oneugene@ukr.net>, 2002, 2003, 2004, 2005, 2006.
+# Andriy Rysin <arysin@bcsii.com>, 2002, 2003, 2006, 2007.
+# Ivan Petrouchtchak <fr.ivan@ukrainian-orthodox.org>, 2005, 2006, 2007, 2008.
+# Yuri Chornoivan <yurchor@ukr.net>, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018.
+msgid ""
+msgstr ""
+"Project-Id-Version: kcoreaddons5_qt\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2018-12-07 07:58+0200\n"
+"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
+"Language-Team: Ukrainian <kde-i18n-uk@kde.org>\n"
+"Language: uk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 2.0\n"
+"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n"
+"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Умови ліцензування для цієї програми не було вказано.\n"
+"Будь ласка, ознайомтеся з документацією або початковим кодом, щоб дізнатися\n"
+"про умови ліцензування.\n"
+
+#: lib/kaboutdata.cpp:306
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Ця програма розповсюджується за умовами %1."
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "Загальна громадська ліцензія GNU версії 2"
+
+#: lib/kaboutdata.cpp:356
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "Скорочена загальна громадська ліцензія GNU версії 2"
+
+#: lib/kaboutdata.cpp:360
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Ліцензія BSD"
+
+#: lib/kaboutdata.cpp:361
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Ліцензія BSD"
+
+#: lib/kaboutdata.cpp:364
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Артистична ліцензія"
+
+#: lib/kaboutdata.cpp:365
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Артистична ліцензія"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Громадська ліцензія Q"
+
+#: lib/kaboutdata.cpp:372
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "Загальна громадська ліцензія GNU версії 3"
+
+#: lib/kaboutdata.cpp:376
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "Скорочена загальна громадська ліцензія GNU версії 3"
+
+#: lib/kaboutdata.cpp:380
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:381
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "Скорочена загальна громадська ліцензія GNU версії 2.1"
+
+#: lib/kaboutdata.cpp:385
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Нетипові"
+
+#: lib/kaboutdata.cpp:388
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Не вказано"
+
+#: lib/kaboutdata.cpp:937
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE перекладено українською мовою групою перекладачів вільного "
+"програмного забезпечення. Щоб дізнатися більше, завітайте на <a href="
+"\"http://www.linux.org.ua/\">наш сайт</a>. Коментарі щодо перекладу "
+"надсилайте на <a href=\"mailto:yurchor@ukr.net\">цю адресу</a> або до списку "
+"листування <a href=\"mailto:kde-i18n-uk@kde.org\">kde-i18n-uk@kde.org</a> "
+"(для надсилання повідомлень до списків листування слід спочатку на них "
+"підписатися).</p><p>З короткою довідкою щодо участі у перекладі KDE "
+"українською можна ознайомитися на <a href=\"http://docs.linux.org.ua/"
+"Переклади/Короткий_довідник_перекладача_KDE/\">цій сторінці</a>.</p>"
+
+#: lib/kaboutdata.cpp:1165
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Показати інформацію щодо авторів."
+
+#: lib/kaboutdata.cpp:1166
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Показати інформацію щодо ліцензування."
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Базова назва файла для стільничного запису цієї програми."
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "назва файла"
+
+#: lib/kaboutdata.cpp:1178
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Автор цієї програми не виявив бажання оприлюднювати своє ім’я."
+
+#: lib/kaboutdata.cpp:1180
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 було створено"
+
+#: lib/kaboutdata.cpp:1191
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr ""
+"Будь ласка, користуйтесь https://bugs.kde.org для повідомлень про помилки."
+
+#: lib/kaboutdata.cpp:1193
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Про вади, будь ласка, повідомляйте на адресу %1."
+
+#: lib/plugin/kpluginloader.cpp:122
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "У бібліотеці %1 не передбачено інтерфейсу KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "й"
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "з"
+
+#: lib/util/kformatprivate.cpp:118
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "а"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "ф"
+
+#: lib/util/kformatprivate.cpp:120
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "п"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "н"
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "мк"
+
+#: lib/util/kformatprivate.cpp:123
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "м"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "к"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Кі"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "М"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Мі"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "Г"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Гі"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "Т"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ті"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "П"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Пі"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "Е"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Еі"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "З"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Зі"
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Й"
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Йі"
+
+#: lib/util/kformatprivate.cpp:140
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "біт"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "Б"
+
+#: lib/util/kformatprivate.cpp:146
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "м"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Гц"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 Б"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 кБ"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 МБ"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 ГБ"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 ТБ"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 ПБ"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 ЕБ"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ЗБ"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 ЙБ"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 Б"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 Кбайт"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 МБ"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 ГБ"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 ТБ"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 ПБ"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 ЕБ"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ЗБ"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 ЙБ"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 Б"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 КіБ"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 МіБ"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 ГіБ"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 ТіБ"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 ПіБ"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 ЕіБ"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ЗіБ"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 ЙіБ"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1хв%2,%3с"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1хв%2с"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1г%2хв"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1г%2хв%3,%4с"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1г%2хв%3с"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2,%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3,%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 днів"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 годин"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 хвилин"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 секунд"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n мілісекунда"
+msgstr[1] "%n мілісекунди"
+msgstr[2] "%n мілісекунд"
+msgstr[3] "%n мілісекунда"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n день"
+msgstr[1] "%n дні"
+msgstr[2] "%n днів"
+msgstr[3] "%n день"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n година"
+msgstr[1] "%n години"
+msgstr[2] "%n годин"
+msgstr[3] "%n година"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n хвилина"
+msgstr[1] "%n хвилини"
+msgstr[2] "%n хвилин"
+msgstr[3] "%n хвилина"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n секунда"
+msgstr[1] "%n секунди"
+msgstr[2] "%n секунд"
+msgstr[3] "%n секунда"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 %2"
+
+#: lib/util/kformatprivate.cpp:509
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Некоректна дата"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Завтра"
+
+#: lib/util/kformatprivate.cpp:521
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Сьогодні"
+
+#: lib/util/kformatprivate.cpp:523
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Вчора"
+
+#: lib/util/kformatprivate.cpp:529
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Минулий понеділок"
+
+#: lib/util/kformatprivate.cpp:531
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "Минулий вівторок"
+
+#: lib/util/kformatprivate.cpp:533
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Минула середа"
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "Минулий четвер"
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "Минула п’ятниця"
+
+#: lib/util/kformatprivate.cpp:539
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "Минула субота"
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "Минула неділя"
+
+#: lib/util/kformatprivate.cpp:546
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Наступний понеділок"
+
+#: lib/util/kformatprivate.cpp:548
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Наступний вівторок"
+
+#: lib/util/kformatprivate.cpp:550
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Наступна середа"
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "Наступний четвер"
+
+#: lib/util/kformatprivate.cpp:554
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Наступна п’ятниця"
+
+#: lib/util/kformatprivate.cpp:556
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Наступна субота"
+
+#: lib/util/kformatprivate.cpp:558
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Наступна неділя"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# translation of kdelibs4.po to Uzbek
+# Mashrab Kuvatov <kmashrab@uni-bremen.de>, 2003, 2004, 2005, 2006, 2008.
+# translation of kdelibs4.po to
+# Copyright (C) 2003, 2004, 2005, 2006, 2008 Free Software Foundation, Inc.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2008-05-30 17:29+0200\n"
+"Last-Translator: Mashrab Kuvatov <kmashrab@uni-bremen.de>\n"
+"Language-Team: Uzbek <floss-uz-l10n@googlegroups.com>\n"
+"Language: uz\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Bu dastur uchun hech qanday litsenziya shartlari koʻrsatilmagan.\n"
+"Iltimos litsenziya shartlarini dastur uchun qoʻllanmada yoki\n"
+"dasturning kodida qarab chiqing.\n"
+
+#: lib/kaboutdata.cpp:306
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Bu dastur %1 shartlari asosida tarqatilgan."
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:356
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:360
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Litsenziya:"
+
+#: lib/kaboutdata.cpp:361
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Litsenziya:"
+
+#: lib/kaboutdata.cpp:364
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Ommaviy kalit"
+
+#: lib/kaboutdata.cpp:365
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Ommaviy kalit"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr ""
+
+#: lib/kaboutdata.cpp:369
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Ommaviy kalit"
+
+#: lib/kaboutdata.cpp:372
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:376
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:381
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr ""
+
+#: lib/kaboutdata.cpp:385
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "&Tanlash"
+
+#: lib/kaboutdata.cpp:388
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Hech qanday provayder tanlanmagan."
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>Turli davlatlardagi tarjima jamoalarini harakati tufayli KDE koʻp "
+"tillarga tarjima qilingan.</p><p>Agar KDE'ni turli tillarga tarjimasi haqida "
+"koʻproq maʼlumotga ega boʻlishni istasangiz, <a href=\"http://l10n.kde.org"
+"\">http://l10n.kde.org/</a> veb-saytiga qarang.</p><p>KDE va umuman Linuksni "
+"oʻzbekchalashtirish haqida koʻproq maʼlumotga ega boʻlishni istasangiz, <a "
+"href=\"http://www.uni-bremen.de/~kmashrab/to-uzbek-linux.html\">\"Linuks "
+"oʻzbekcha gapiradi\"</a> loyihasining veb-saytiga qarang.</p>"
+
+#: lib/kaboutdata.cpp:1165
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Muallif haqida maʼlumotni koʻrsatish"
+
+#: lib/kaboutdata.cpp:1166
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Litsenziya haqida maʼlumotni koʻrsatish"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+#, fuzzy
+#| msgid "Vietnamese"
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "Vetnamcha"
+
+#: lib/kaboutdata.cpp:1178
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr ""
+"Ushbu dastur ismini oshkor qilishni istamagan kishi tomonidan yozilgan."
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1\n"
+"%2\n"
+"tomonidan yozilgan."
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr ""
+"Iltimos, xato haqida xabar berish uchun http://bugs.kde.org veb-saytidan "
+"foydalaning.\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Iltimos, xato haqida quyidagiga xabar bering. %1\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer an %2 function."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "%1 kutubxonasida %2 funksiyasi mavjud emas."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "ertalab"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "kechqurun"
+
+#: lib/util/kformatprivate.cpp:121
+#, fuzzy
+#| msgid "On"
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "Yoqilgan"
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "ertalab"
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Ok"
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "Ok"
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Pay"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Oʻzgartirish"
+
+#: lib/util/kformatprivate.cpp:127
+#, fuzzy
+#| msgid "G:"
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G:"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tir"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Tahrirlash"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+#, fuzzy
+#| msgctxt "QFont"
+#| msgid "Yi"
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:132
+#, fuzzy
+#| msgctxt "QFont"
+#| msgid "Yi"
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Joʻnatish"
+
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy
+#| msgid "B:"
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B:"
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "ertalab"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 %2"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, fuzzy, qt-format
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "Bugun"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 daqiqa"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, fuzzy, qt-format
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 soniya"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 soniya"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "Bugun"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] ""
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 daqiqa"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 soniya"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 %2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "xato bayroqlar"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Bugun"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Kecha"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Kelasi oy"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "Seshanba"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Chorshanba"
+
+#: lib/util/kformatprivate.cpp:535
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "Payshanba"
+
+#: lib/util/kformatprivate.cpp:537
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "Juma"
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "Shanba"
+
+#: lib/util/kformatprivate.cpp:541
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "Yakshanba"
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Kelasi oy"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Seshanba"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Chorshanba"
+
+#: lib/util/kformatprivate.cpp:552
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "Payshanba"
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Juma"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Shanba"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Yakshanba"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1 %2"
--- /dev/null
+# translation of kdelibs4.po to Uzbek
+# translation of kdelibs4.po to
+# Copyright (C) 2003, 2004, 2005, 2006, 2008 Free Software Foundation, Inc.
+# Mashrab Kuvatov <kmashrab@uni-bremen.de>, 2003, 2004, 2005, 2006, 2008, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2009-10-17 00:34+0200\n"
+"Last-Translator: Mashrab Kuvatov <kmashrab@uni-bremen.de>\n"
+"Language-Team: Uzbek <floss-uz-l10n@googlegroups.com>\n"
+"Language: uz\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.0\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Бу дастур учун ҳеч қандай лицензия шартлари кўрсатилмаган.\n"
+"Илтимос лицензия шартларини дастур учун қўлланмада ёки\n"
+"дастурнинг кодида қараб чиқинг.\n"
+
+#: lib/kaboutdata.cpp:306
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Бу дастур %1 шартлари асосида тарқатилган."
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:356
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:360
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Лицензия:"
+
+#: lib/kaboutdata.cpp:361
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Лицензия:"
+
+#: lib/kaboutdata.cpp:364
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Оммавий калит"
+
+#: lib/kaboutdata.cpp:365
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Оммавий калит"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr ""
+
+#: lib/kaboutdata.cpp:369
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Оммавий калит"
+
+#: lib/kaboutdata.cpp:372
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:376
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:381
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr ""
+
+#: lib/kaboutdata.cpp:385
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "&Танлаш"
+
+#: lib/kaboutdata.cpp:388
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Ҳеч қандай провайдер танланмаган."
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>Турли давлатлардаги таржима жамоаларини ҳаракати туфайли KDE кўп тилларга "
+"таржима қилинган.</p><p>Агар KDE'ни турли тилларга таржимаси ҳақида кўпроқ "
+"маълумотга эга бўлишни истасангиз, <a href=\"http://l10n.kde.org\">http://"
+"l10n.kde.org/</a> веб-сайтига қаранг.</p><p>KDE ва умуман Линуксни "
+"ўзбекчалаштириш ҳақида кўпроқ маълумотга эга бўлишни истасангиз, <a href="
+"\"http://www.uni-bremen.de/~kmashrab/to-uzbek-linux.html\">\"Линукс ўзбекча "
+"гапиради\"</a> лойиҳасининг веб-сайтига қаранг.</p>"
+
+#: lib/kaboutdata.cpp:1165
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Муаллиф ҳақида маълумотни кўрсатиш"
+
+#: lib/kaboutdata.cpp:1166
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Лицензия ҳақида маълумотни кўрсатиш"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+#, fuzzy
+#| msgid "Vietnamese"
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "Ветнамча"
+
+#: lib/kaboutdata.cpp:1178
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Ушбу дастур исмини ошкор қилишни истамаган киши томонидан ёзилган."
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1\n"
+"%2\n"
+"томонидан ёзилган."
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr ""
+"Илтимос, хато ҳақида хабар бериш учун http://bugs.kde.org веб-сайтидан "
+"фойдаланинг.\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Илтимос, хато ҳақида қуйидагига хабар беринг. %1\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer an %2 function."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "%1 кутубхонасида %2 функцияси мавжуд эмас."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "эрталаб"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "кечқурун"
+
+#: lib/util/kformatprivate.cpp:121
+#, fuzzy
+#| msgid "On"
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "Ёқилган"
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "эрталаб"
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Ok"
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "Ок"
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Пай"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Ўзгартириш"
+
+#: lib/util/kformatprivate.cpp:127
+#, fuzzy
+#| msgid "G:"
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G:"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Тир"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Таҳрирлаш"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+#, fuzzy
+#| msgctxt "QFont"
+#| msgid "Yi"
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Йи"
+
+#: lib/util/kformatprivate.cpp:132
+#, fuzzy
+#| msgctxt "QFont"
+#| msgid "Yi"
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Йи"
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Жўнатиш"
+
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy
+#| msgid "B:"
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B:"
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "эрталаб"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 Б"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 Кб"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 Мб"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 Гб"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 Тб"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 Б"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 Мб"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 Гб"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 Тб"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 Б"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 %2"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 кун"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 соат"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 дақиқа"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 сония"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 миллисония"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 кун"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 соат"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 дақиқа"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 сония"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 %2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "хато байроқлар"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Бугун"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Кеча"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Келаси ой"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "Сешанба"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Чоршанба"
+
+#: lib/util/kformatprivate.cpp:535
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "Пайшанба"
+
+#: lib/util/kformatprivate.cpp:537
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "Жума"
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "Шанба"
+
+#: lib/util/kformatprivate.cpp:541
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "Якшанба"
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Келаси ой"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Сешанба"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Чоршанба"
+
+#: lib/util/kformatprivate.cpp:552
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "Пайшанба"
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Жума"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Шанба"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Якшанба"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1 %2"
--- /dev/null
+# Vietnamese translation for kdelibs.
+# Copyright © 2007 KDE i18n Project for Vietnamese.
+#
+# Clytie Siddall <clytie@riverland.net.au>, 2006-2007.
+# Hoàng Đức Hiếu <hieu.d.hoang@gmail.com>, 2008, 2011.
+# Lê Hoàng Phương <herophuong93@gmail.com>, 2011, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2012-09-23 18:43+0800\n"
+"Last-Translator: Lê Hoàng Phương <herophuong93@gmail.com>\n"
+"Language-Team: American English <kde-i18n-vi@kde.org>\n"
+"Language: en_US\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Lokalize 1.5\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Chương trình này chưa ghi rõ điều kiện bản quyền.\n"
+"Vui lòng kiểm tra xem tài liệu hướng dẫn hoặc\n"
+"mã nguồn chứa điều kiện bản quyền nào.\n"
+
+#: lib/kaboutdata.cpp:306
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Chương trình này được phát hành với điều kiện của %1."
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "Giấy phép công cộng chung GNU phiên bản 2"
+
+#: lib/kaboutdata.cpp:356
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "Giấy phép công cộng chung ít khoản hơn GNU phiên bản 2"
+
+#: lib/kaboutdata.cpp:360
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Giấy phép BSD"
+
+#: lib/kaboutdata.cpp:361
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Giấy phép BSD"
+
+#: lib/kaboutdata.cpp:364
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Giấy phép nghệ thuật"
+
+#: lib/kaboutdata.cpp:365
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Giấy phép nghệ thuật"
+
+#: lib/kaboutdata.cpp:368
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Giấy Phép Công Cộng Q"
+
+#: lib/kaboutdata.cpp:372
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "Giấy phép công cộng chung GNU phiên bản 3"
+
+#: lib/kaboutdata.cpp:376
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "Giấy phép công cộng chung ít khoản hơn GNU phiên bản 3"
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:381
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "Giấy phép công cộng chung ít khoản hơn GNU phiên bản 2"
+
+#: lib/kaboutdata.cpp:385
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Tự chọn"
+
+#: lib/kaboutdata.cpp:388
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Chưa chỉ định"
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE đã được dịch sang nhiều ngôn ngữ nhờ có công lao của các đội ngũ dịch "
+"thuật trên toàn thế giới.</p><p>Để biết thêm thông tin về công việc quốc tế "
+"hoá KDE, vui lòng ghé thăm <a href=\"http://l10n.kde.org\">http://l10n.kde."
+"org</a></p>"
+
+#: lib/kaboutdata.cpp:1165
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Hiển thị thông tin về tác giả"
+
+#: lib/kaboutdata.cpp:1166
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Hiển thị thông tin về bản quyền"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+#, fuzzy
+#| msgid "Filename Error"
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "Lỗi tên tập tin"
+
+#: lib/kaboutdata.cpp:1178
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Ứng dụng này có tác giả vô danh."
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"Tác giả của %1 :\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Vui lòng thông báo lỗi bằng http://bugs.kde.org.\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Hãy thông báo lỗi nào cho %1.\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer an %2 function."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Thư viện %1 không cung cấp hàm %2."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "sáng"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "chiều/tối"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "sáng"
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Ok"
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "Được"
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Kha"
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "SA"
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Th5"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tir"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "C"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "C"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Hiệu chỉnh"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Gởi"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "sáng"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, fuzzy, qt-format
+#| msgctxt "memory size in 1024 bytes"
+#| msgid "%1 KB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, fuzzy, qt-format
+#| msgctxt "size in 1024 bytes"
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, fuzzy, qt-format
+#| msgctxt "size in 2^20 bytes"
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, fuzzy, qt-format
+#| msgctxt "size in 2^30 bytes"
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, fuzzy, qt-format
+#| msgctxt "size in 2^50 bytes"
+#| msgid "%1 PiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, fuzzy, qt-format
+#| msgctxt "size in 2^60 bytes"
+#| msgid "%1 EiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, fuzzy, qt-format
+#| msgctxt "size in 2^70 bytes"
+#| msgid "%1 ZiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, fuzzy, qt-format
+#| msgctxt "size in 2^80 bytes"
+#| msgid "%1 YiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 ngày"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 giờ"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 phút"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 giây"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 mili-giây"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 ngày"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 giờ"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 phút"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 giây"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 và %2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+#| msgid "Invalid item."
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Mục không hợp lệ."
+
+#: lib/util/kformatprivate.cpp:519
+#, fuzzy
+#| msgctxt "@option tomorrow"
+#| msgid "Tomorrow"
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Ngày mai"
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Hôm nay"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Hôm qua"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+#| msgctxt "@option last month"
+#| msgid "Last Month"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Tháng trước"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "Thứ Ba"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Thứ Tư"
+
+#: lib/util/kformatprivate.cpp:535
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "Thứ Năm"
+
+#: lib/util/kformatprivate.cpp:537
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "Thứ Sáu"
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "Thứ Bảy"
+
+#: lib/util/kformatprivate.cpp:541
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "Chủ Nhật"
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+#| msgctxt "@option next month"
+#| msgid "Next Month"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Tháng tới"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Thứ Ba"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Thứ Tư"
+
+#: lib/util/kformatprivate.cpp:552
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "Thứ Năm"
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Thứ Sáu"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Thứ Bảy"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Chủ Nhật"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, fuzzy, qt-format
+#| msgctxt "City, Country"
+#| msgid "%1, %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# translation of kdelibs4.po to Walloon
+# Ratournaedje e walon des messaedjes di KDE.
+#
+# Lorint Hendschel <lorint.hendschel@skynet.be>, 2002.
+# Pablo Saratxaga <pablo@walon.org>, 2002-2004, 2007.
+# Jean Cayron <jean.cayron@gmail.com>, 2007, 2008, 2009, 2010, 2011.
+# Jean Cayron <jean.cayron@tele2allin.be>, 2007.
+# Jean Cayron <jean.cayron@base.be>, 2011, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2012-07-04 17:33+0200\n"
+"Last-Translator: Jean Cayron <jean.cayron@base.be>\n"
+"Language-Team: Walloon <linux-wa@walon.org>\n"
+"Language: wa\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.2\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Poedit-Language: Walloon\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"I n' a nole licince k' a stî dnêye po ç' programe ci.\n"
+"Alez vey el documintåcion ou dvins les fitchîs sourdants po vey\n"
+"s' i gn a des racsegnmints sol licince.\n"
+
+#: lib/kaboutdata.cpp:306
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Ci programe est csemé dizo l´ licince %1."
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL m2"
+
+#: lib/kaboutdata.cpp:353
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "Licince publike djeneråle GNU (GPL) modêye 2"
+
+#: lib/kaboutdata.cpp:356
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL m2"
+
+#: lib/kaboutdata.cpp:357
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "Schate licince publike djeneråle GNU (GPL) modêye 2"
+
+#: lib/kaboutdata.cpp:360
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Licince BSD"
+
+#: lib/kaboutdata.cpp:361
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Licince BSD"
+
+#: lib/kaboutdata.cpp:364
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Licince årtistike"
+
+#: lib/kaboutdata.cpp:365
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Licince årtistike"
+
+#: lib/kaboutdata.cpp:368
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL m1.0"
+
+#: lib/kaboutdata.cpp:369
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Licince publike Q"
+
+#: lib/kaboutdata.cpp:372
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL m3"
+
+#: lib/kaboutdata.cpp:373
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "Licince publike djeneråle GNU (GPL) modêye 3"
+
+#: lib/kaboutdata.cpp:376
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL m3"
+
+#: lib/kaboutdata.cpp:377
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "Schate licince publike djeneråle GNU (GPL) modêye 3"
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL m2"
+
+#: lib/kaboutdata.cpp:381
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "Schate licince publike djeneråle GNU (GPL) modêye 2"
+
+#: lib/kaboutdata.cpp:385
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Licince prôpe"
+
+#: lib/kaboutdata.cpp:388
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Nén specifieye"
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE a stî ratourné dins tot plin di lingaedjes gråces a l' ovraedje des "
+"ekipes di ratournaedje tot avå l' Daegne.</p><p>Li ratournaedje e walon a "
+"stî fwait tot shuvant les rîles del novele ortografeye do walon, li «rfondou "
+"walon».</p><p>Po pus d' infôrmåcions so l' eternåcionålijhaedje di KDE, "
+"vizitez <a href=\"http://l10n.kde.org\">http://l10n.kde.org</a></p><p>Po pus "
+"d' infôrmåcions sol rifondou walon, vizitez <a href=\"http://rifondou.walon."
+"org\">http://rifondou.walon.org/</a></p>"
+
+#: lib/kaboutdata.cpp:1165
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Mostere l' infôrmåcion so l' oteur"
+
+#: lib/kaboutdata.cpp:1166
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Mostere l' infôrmåcion sol licince"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+#, fuzzy
+#| msgid "Filename Error"
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "Åk ni va nén avou l' no do fitchî"
+
+#: lib/kaboutdata.cpp:1178
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Ci programe ci a stî scrît pa ene sakî ki vout dmorer anonime."
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 a stî scrît pa\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "S' i vs plait, eployîz http://bugs.kde.org po rapoirter les bugs.\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "S' i vs plait, eployîz %1 po rapoirter les bugs.\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Li livreye %1 n' ofere nén ene fabrike ki rote avou KDE 4."
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "pm"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Ok"
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "'l est bon"
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgctxt "Coptic month 4 - ShortName"
+#| msgid "Kia"
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Kha"
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "AM"
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+#| msgctxt "Ethiopian month 8 - ShortName"
+#| msgid "Miy"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "May"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tir"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:129
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Candjî"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Evoyî"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 o"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 ko"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 Mo"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 Go"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 To"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 Po"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 Eo"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 Zo"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 Yo"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 o"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, fuzzy, qt-format
+#| msgctxt "memory size in 1024 bytes"
+#| msgid "%1 KB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 Ko"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 Mo"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 Go"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 To"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 Po"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 Eo"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 Zo"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 Yo"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 o"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, fuzzy, qt-format
+#| msgctxt "size in 1024 bytes"
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 Kio"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, fuzzy, qt-format
+#| msgctxt "size in 2^20 bytes"
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 Mio"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, fuzzy, qt-format
+#| msgctxt "size in 2^30 bytes"
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 Gio"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 Tio"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, fuzzy, qt-format
+#| msgctxt "size in 2^50 bytes"
+#| msgid "%1 PiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 Pio"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, fuzzy, qt-format
+#| msgctxt "size in 2^60 bytes"
+#| msgid "%1 EiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 Eio"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, fuzzy, qt-format
+#| msgctxt "size in 2^70 bytes"
+#| msgid "%1 ZiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 Zio"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, fuzzy, qt-format
+#| msgctxt "size in 2^80 bytes"
+#| msgid "%1 YiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 Yio"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 djoûs"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 eures"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 munutes"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 segondes"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 milisegonde"
+msgstr[1] "%1 milisegonde"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 djoûs"
+msgstr[1] "%1 djoûs"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 eures"
+msgstr[1] "%1 eures"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 munutes"
+msgstr[1] "%1 munutes"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 segondes"
+msgstr[1] "%1 segondes"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 eyet %2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+#| msgid "Invalid item."
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Mwais cayet."
+
+#: lib/util/kformatprivate.cpp:519
+#, fuzzy
+#| msgctxt "@option tomorrow"
+#| msgid "Tomorrow"
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Dimwin"
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Ouy"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Ayir"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+#| msgctxt "@option last month"
+#| msgid "Last Month"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Li moes passé"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "mårdi"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "mierkidi"
+
+#: lib/util/kformatprivate.cpp:535
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "djudi"
+
+#: lib/util/kformatprivate.cpp:537
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "vénrdi"
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "semdi"
+
+#: lib/util/kformatprivate.cpp:541
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "dimegne"
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+#| msgctxt "@option next month"
+#| msgid "Next Month"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Moes shuvant"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "mårdi"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "mierkidi"
+
+#: lib/util/kformatprivate.cpp:552
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "djudi"
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "vénrdi"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "semdi"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "dimegne"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, fuzzy, qt-format
+#| msgctxt "City, Country"
+#| msgid "%1, %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# translation of kdelibs4.po to
+# translation of kdelibs4.po to
+# translation of kdelibs4.po to
+# translation of kdelibs4.po to Xhosa
+# K Desktop Environment - kdelibs
+# Copyright (C) 2001 translate.org.za
+# Antoinette Dekeni <antoinette@transalate.org.za>, 2001.
+# Lwandle Mgidlana <lwandle@translate.org.za>, 2002
+# Thelma Lungcuzo <thelma@translate.org.za>, 2002
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2002-12-13 17:20SAST\n"
+"Last-Translator: Lwandle Mgidlana <lwandle@translate.org.za>\n"
+"Language-Team: Xhosa <xhosa@translate.org.za>\n"
+"Language: xh\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.0beta2\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Akukho zinto ezikhankanyiweyo ezingenalayisenisi koludweliso lwenkqubo\n"
+"Nceda khangela uxwebhu okanye imvelaphi yazo\n"
+"naziphi na izinto ezinelayisenisi.\n"
+
+#: lib/kaboutdata.cpp:306
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Oludweliso lwenkqubo lunikezelwe phantsi kweemeko ze %1."
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "PGP"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:356
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "PGP"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:360
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Umsinga wesandi Phezulu"
+
+#: lib/kaboutdata.cpp:361
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Umsinga wesandi Phezulu"
+
+#: lib/kaboutdata.cpp:364
+#, fuzzy
+#| msgid "Public Key"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Isitshixo Sikawonke wonke"
+
+#: lib/kaboutdata.cpp:365
+#, fuzzy
+#| msgid "Public Key"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Isitshixo Sikawonke wonke"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr ""
+
+#: lib/kaboutdata.cpp:369
+#, fuzzy
+#| msgid "Public Key"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Isitshixo Sikawonke wonke"
+
+#: lib/kaboutdata.cpp:372
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "PGP"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:376
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "PGP"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "PGP"
+
+#: lib/kaboutdata.cpp:381
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr ""
+
+#: lib/kaboutdata.cpp:385
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "I&siko"
+
+#: lib/kaboutdata.cpp:388
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Akukho thuba likhethiweyo"
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE iguqulelwe esixhoseni liqela le translate.org.za:<br> u-Antoinette "
+"Dekeni, Dwayne Bailey,Lwandle Mgidlana, Thelma Lungcuzo </p><p>KDE "
+"iguqulelwe kwiilwimi ezininzi. Enkosi kumsebenzi wamaqela oguqulelo lolwimi "
+"kwihlabathi lonke.</p><p> Xa ufuna ulwazi oluphangaleleyo nge KDE "
+"ngokujikelele ndwendwela i-http://i18n.kde.org</p>"
+
+#: lib/kaboutdata.cpp:1165
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Bonisa ulwazi lombhali"
+
+#: lib/kaboutdata.cpp:1166
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Bonisa ulwazi lwelayisenisi"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+#, fuzzy
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "Igama Elinikiweyo"
+
+#: lib/kaboutdata.cpp:1178
+#, fuzzy
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "%1 yabhalwa ngumntu ofuna ukuhlala engaziwa."
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 yabhalwa ngu\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr ""
+"Nceda sebenzisa i http://bugs.kde.org ukuchaza amagciwane, ungabhaleli "
+"ababhali nkqo.\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr ""
+"Nceda sebenzisa i http://bugs.kde.org ukuchaza amagciwane, ungabhaleli "
+"ababhali nkqo.\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "pm"
+
+#: lib/util/kformatprivate.cpp:121
+#, fuzzy
+#| msgid "On"
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "Qala"
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Guqula kancinane"
+
+#: lib/util/kformatprivate.cpp:127
+#, fuzzy
+#| msgid "G:"
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G:"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "ka Mat"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Hlela"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+#, fuzzy
+#| msgctxt "QFont"
+#| msgid "Yi"
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:132
+#, fuzzy
+#| msgctxt "QFont"
+#| msgid "Yi"
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Ngenisa"
+
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy
+#| msgid "B:"
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B:"
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 %2"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, fuzzy, qt-format
+#| msgid "Monday"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "Mvulo"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 iinketho"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 iinketho"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 iinketho"
+msgstr[1] "%1 iinketho"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgid "Monday"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "Mvulo"
+msgstr[1] "Mvulo"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] ""
+msgstr[1] ""
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 iinketho"
+msgstr[1] "%1 iinketho"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 iinketho"
+msgstr[1] "%1 iinketho"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 %2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Igama lefayile elingasebenziyo (ama)"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+#| msgid "Monday"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Mvulo"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Lwesibini"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "Inyanga elandelayo"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "Lwesibini"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "Lwesithathu"
+
+#: lib/util/kformatprivate.cpp:535
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "Lwesine"
+
+#: lib/util/kformatprivate.cpp:537
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "Lwesihlanu"
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "Mgqibelo"
+
+#: lib/util/kformatprivate.cpp:541
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "Cawe"
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "Inyanga elandelayo"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "Lwesibini"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "Lwesithathu"
+
+#: lib/util/kformatprivate.cpp:552
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "Lwesine"
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "Lwesihlanu"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "Mgqibelo"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "Cawe"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1 %2"
--- /dev/null
+# translation of kdelibs4.po to Chinese Simplified
+# Copyright (C) 2007 Free Software Foundation, Inc.
+#
+# Lie Ex <lilith.ex@gmail.com> 2007-2011.
+# Wang Jian <lark@linux.ustc.edu.cn>, 1998.
+# Sarah Smith <sarahs@redhat.com>, 2002.
+# Xiong Jiang <jxiong@offtopic.org>, 2002,2003,2004.
+# Funda Wang <fundawang@linux.net.cn>, 2002,2003,2004.
+# Liang Qi <cavendish.qi@gmail.com>, 2007.
+# Feng Chao <chaofeng111@gmail.com>, 2010, 2012, 2014.
+# Ni Hui <shuizhuyuanluo@126.com>, 2010, 2011, 2012.
+# Weng Xuetian <wengxt@gmail.com>, 2011, 2012, 2013, 2015, 2016, 2017.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdeorg\n"
+"PO-Revision-Date: 2019-01-05 20:42\n"
+"Last-Translator: guoyunhe <i@guoyunhe.me>\n"
+"Language-Team: Chinese Simplified\n"
+"Language: zh_CN\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Qt-Contexts: true\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: kdeorg\n"
+"X-Crowdin-Language: zh-CN\n"
+"X-Crowdin-File: /kf5-trunk/messages/frameworks/kcoreaddons5_qt.pot\n"
+
+#: lib/kaboutdata.cpp:296
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"这个程序没有指定许可协议。请检查文档或源文件来查看\n"
+"是否有许可协议。\n"
+
+#: lib/kaboutdata.cpp:306
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "本程序在 %1 的条款下分发。"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU 通用公共许可协议版本 2"
+
+#: lib/kaboutdata.cpp:356
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU 较宽松通用公共许可协议版本 2"
+
+#: lib/kaboutdata.cpp:360
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD 授权"
+
+#: lib/kaboutdata.cpp:361
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD 授权"
+
+#: lib/kaboutdata.cpp:364
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artistic 授权"
+
+#: lib/kaboutdata.cpp:365
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artistic 授权"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q 公共授权(QPL)"
+
+#: lib/kaboutdata.cpp:372
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU 通用公共许可协议版本 3"
+
+#: lib/kaboutdata.cpp:376
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU 较宽松通用公共许可协议版本 3"
+
+#: lib/kaboutdata.cpp:380
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:381
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU 较宽松通用公共许可协议版本 2.1"
+
+#: lib/kaboutdata.cpp:385
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "自定义"
+
+#: lib/kaboutdata.cpp:388
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "未指定"
+
+#: lib/kaboutdata.cpp:937
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>感谢分布在世界各地的翻译小组的辛勤工作,KDE 被翻译成多种语言。</p><p>要了"
+"解 KDE 国际化的更多信息,请访问 <a href=\"https://l10n.kde.org\">http://l10n."
+"kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1165
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "显示作者信息."
+
+#: lib/kaboutdata.cpp:1166
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "显示版权信息."
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "此应用程序的桌面条目的基础文件名"
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "文件名"
+
+#: lib/kaboutdata.cpp:1178
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "此应用程序由某个不愿透露姓名的人编写。"
+
+#: lib/kaboutdata.cpp:1180
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 编写者:"
+
+#: lib/kaboutdata.cpp:1191
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "请使用 https://bugs.kde.org 报告错误。"
+
+#: lib/kaboutdata.cpp:1193
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "请将错误报告给 %1。"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "库 %1 并不提供 KPluginFactory。"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "y"
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "z"
+
+#: lib/util/kformatprivate.cpp:118
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "a"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "f"
+
+#: lib/util/kformatprivate.cpp:120
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "p"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "µ"
+
+#: lib/util/kformatprivate.cpp:123
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "k"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Ki"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "M"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mi"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Gi"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "T"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ti"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pi"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "E"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ei"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "Z"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Zi"
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:140
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "比特"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B"
+
+#: lib/util/kformatprivate.cpp:146
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "米"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Hz"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2.%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h%2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2m%3.%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 天"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 小时"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 分钟"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 秒"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n 毫秒"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n 天"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n 小时"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n 分"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n 秒"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 %2"
+
+#: lib/util/kformatprivate.cpp:509
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "无效的日期"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "明天"
+
+#: lib/util/kformatprivate.cpp:521
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "今天"
+
+#: lib/util/kformatprivate.cpp:523
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "昨天"
+
+#: lib/util/kformatprivate.cpp:529
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "上星期一"
+
+#: lib/util/kformatprivate.cpp:531
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "上星期二"
+
+#: lib/util/kformatprivate.cpp:533
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "上星期三"
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "上星期四"
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "上星期五"
+
+#: lib/util/kformatprivate.cpp:539
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "上星期六"
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "上星期日"
+
+#: lib/util/kformatprivate.cpp:546
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "下星期一"
+
+#: lib/util/kformatprivate.cpp:548
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "下星期二"
+
+#: lib/util/kformatprivate.cpp:550
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "下星期三"
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "下星期四"
+
+#: lib/util/kformatprivate.cpp:554
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "下星期五"
+
+#: lib/util/kformatprivate.cpp:556
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "下星期六"
+
+#: lib/util/kformatprivate.cpp:558
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "下星期日"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+# translation of kdelibs4.po to Chinese (Hong Kong)
+# Chinese (traditional) translation for kdeutils
+# Copyright (C) 2001, 02, 04, 05 Free Software Foundation, Inc.
+#
+# Eric Cheng <ericc@shinewave.com.tw>, unknown.
+#
+# with reference from zh_CN translation (as of 2002-11-08):
+# Chih-Wei Huang <cwhuang@linux.org.tw>, 2001.
+# Kenduest Lee <kenduest@i18n.linux.org.tw>, 2001.
+# Jouston Huang (Huang, Jiun-Jeng) <jouston@housediy.com>, 2002.
+# Kenduest Lee <kenduest@i18n.linux.org.tw>, 2002.
+# Wang Jian <lark@linux.net.cn>, 2002.
+# Anthony Fok <anthony@thizlinux.com>, 2002.
+# Yuan-Chen Cheng <ycheng@slat.org>, 2002.
+# Wang Jian <lark@linux.ustc.edu.cn>, 1998.
+# Funda Wang <fundawang@en2china.com>, 2002.
+# Sarah Smith <sarahs@redhat.com>, 2002.
+# Xiong Jiang <jxiong@offtopic.org>, 2002.
+# Chia-Lin, Kao <acelan@linux.org.tw>, 2004.
+# Stanley Wong <stanley18fan0k@yahoo.com.hk>, 2005.
+# Abel Cheung <abel@oaka.org>, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2006-01-04 13:32+0800\n"
+"Last-Translator: Abel Cheung <abel@oaka.org>\n"
+"Language-Team: Chinese (Hong Kong) <community@linuxhall.org>\n"
+"Language: zh_HK\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.3\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"這個程式沒有指定授權條款。\n"
+"請檢查文件或原始碼來檢查是否有授權條款。\n"
+
+#: lib/kaboutdata.cpp:306
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "這個程式以 %1 的條款散佈。"
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgid "GPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:356
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:360
+#, fuzzy
+#| msgid "License:"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "許可證:"
+
+#: lib/kaboutdata.cpp:361
+#, fuzzy
+#| msgid "License:"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "許可證:"
+
+#: lib/kaboutdata.cpp:364
+#, fuzzy
+#| msgid "Public Key"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "公開密鑰"
+
+#: lib/kaboutdata.cpp:365
+#, fuzzy
+#| msgid "Public Key"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "公開密鑰"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr ""
+
+#: lib/kaboutdata.cpp:369
+#, fuzzy
+#| msgid "Public Key"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "公開密鑰"
+
+#: lib/kaboutdata.cpp:372
+#, fuzzy
+#| msgid "GPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:376
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:380
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:381
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr ""
+
+#: lib/kaboutdata.cpp:385
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "自訂(&U)"
+
+#: lib/kaboutdata.cpp:388
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "沒有選擇供應者。"
+
+#: lib/kaboutdata.cpp:937
+#, fuzzy
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>關於 KDE 的中文化</p><p>如果想協助 KDE 的香港中文翻譯工作或者匯報問題,請"
+"到<a href=\"http://linuxhall.org/cgi-bin/mailman/listinfo/community\">香港中"
+"文翻譯郵件論壇</a>登記,然後就可以送電郵到 <a href=\"mailto:"
+"community@linuxhall.org\">community@linuxhall.org</a> 參與討論。</p><p>KDE 能"
+"夠翻譯成各國語言,要特別感謝來自各地的翻譯小組的工作。如果對於 KDE 國際化有興"
+"趣,請參考 <a href=\"http://i18n.kde.org/\">http://i18n.kde.org/</a>。</"
+"p><blockquote><p>KDE 的香港翻譯目前是由<a href=\"mailto:community@linuxhall."
+"org\"><b>香港翻譯隊伍</b></a>所主理,並得到以往和現在各志願人士義務協助。特別"
+"嗚謝以往繁體中文的翻譯者 (如 Joe Man, T.H. Tsieh, C.W. Huang, Anthony Fok "
+"等) 和管理者 (包括 shyue, kenduest lee, seventeen, jouston, acelan 等人),沒"
+"有他們以往的辛勞工作,就沒有現在的繁體中文翻譯。</p></blockquote>"
+
+#: lib/kaboutdata.cpp:1165
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "顯示作者資訊"
+
+#: lib/kaboutdata.cpp:1166
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "顯示版權資訊"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1169
+#, fuzzy
+#| msgid "Vietnamese"
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "越南文"
+
+#: lib/kaboutdata.cpp:1178
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "這個應用程式是由某個不願透露姓名的人編寫。"
+
+#: lib/kaboutdata.cpp:1180
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 的作者是:\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1191
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "請使用 http://bugs.kde.org 報告問題。\n"
+
+#: lib/kaboutdata.cpp:1193
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "請回報問題到 %1。\n"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer an %2 function."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "函數庫 %1 不提供 %2 這個功能。"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "pm"
+
+#: lib/util/kformatprivate.cpp:121
+#, fuzzy
+#| msgid "On"
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "開"
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:123
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Ok"
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "Ok"
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Kha"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:126
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "修改"
+
+#: lib/util/kformatprivate.cpp:127
+#, fuzzy
+#| msgid "G:"
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "綠:"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tir"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:130
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "編輯"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:132
+#, fuzzy
+#| msgctxt "QFont"
+#| msgid "Yi"
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "彝文"
+
+#: lib/util/kformatprivate.cpp:132
+#, fuzzy
+#| msgctxt "QFont"
+#| msgid "Yi"
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "彝文"
+
+#: lib/util/kformatprivate.cpp:140
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "提交"
+
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy
+#| msgid "B:"
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "藍:"
+
+#: lib/util/kformatprivate.cpp:146
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2,%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 %2"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, fuzzy, qt-format
+#| msgid "Monday"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "星期一"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 個選項"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 個選項"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 個選項"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, fuzzy, qt-format
+#| msgid "Monday"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "星期一"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] ""
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 個選項"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 個選項"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 %2"
+
+#: lib/util/kformatprivate.cpp:509
+#, fuzzy
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "錯誤的旗號"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy
+#| msgid "Monday"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "星期一"
+
+#: lib/util/kformatprivate.cpp:523
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "星期二"
+
+#: lib/util/kformatprivate.cpp:529
+#, fuzzy
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "下一個月"
+
+#: lib/util/kformatprivate.cpp:531
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "星期二"
+
+#: lib/util/kformatprivate.cpp:533
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "星期三"
+
+#: lib/util/kformatprivate.cpp:535
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "星期四"
+
+#: lib/util/kformatprivate.cpp:537
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "星期五"
+
+#: lib/util/kformatprivate.cpp:539
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "星期六"
+
+#: lib/util/kformatprivate.cpp:541
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "星期日"
+
+#: lib/util/kformatprivate.cpp:546
+#, fuzzy
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "下一個月"
+
+#: lib/util/kformatprivate.cpp:548
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "星期二"
+
+#: lib/util/kformatprivate.cpp:550
+#, fuzzy
+#| msgid "Wednesday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "星期三"
+
+#: lib/util/kformatprivate.cpp:552
+#, fuzzy
+#| msgid "Thursday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "星期四"
+
+#: lib/util/kformatprivate.cpp:554
+#, fuzzy
+#| msgid "Friday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "星期五"
+
+#: lib/util/kformatprivate.cpp:556
+#, fuzzy
+#| msgid "Saturday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "星期六"
+
+#: lib/util/kformatprivate.cpp:558
+#, fuzzy
+#| msgid "Sunday"
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "星期日"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1 %2"
--- /dev/null
+# translation of kdelibs4.po to Chinese Traditional
+# Copyright (C) 2001, 2002, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+# Eric Cheng <ericc@shinewave.com.tw>, unknown.
+# This file referenced zh_CN translations at 2002.
+# Chih-Wei Huang <cwhuang@linux.org.tw>, 2001.
+# Kenduest Lee <kenduest@i18n.linux.org.tw>, 2001, 2002.
+# Jouston Huang (Huang, Jiun-Jeng) <jouston@housediy.com>, 2002.
+# Chia-Lin, Kao <acelan@linux.org.tw>, 2004.
+# Yuan-Chen Cheng <ycheng@slat.org>, 2002.
+# Goodhorse <franklin@goodhorse.idv.tw>, 2008.
+# Frank Weng (a.k.a. Franklin) <franklin at goodhorse dot idv dot tw>, 2006-2009, 2010.
+# Franklin Weng <franklin@mail.everfocus.com.tw>, 2010, 2011, 2012.
+# Franklin Weng <franklin@goodhorse.idv.tw>, 2010, 2011, 2012, 2013, 2014, 2015, 2017.
+# Jeff Huang <s8321414@gmail.com>, 2016, 2017.
+# pan93412 <pan93412@gmail.com>, 2018.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2018-12-08 11:32+0800\n"
+"Last-Translator: pan93412 <pan93412@gmail.com>\n"
+"Language-Team: Chinese <zh-l10n@linux.org.tw>\n"
+"Language: zh_TW\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 2.0\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:296
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"這個程式沒有指定授權條款。\n"
+"請檢查文件或原始碼來檢查是否有任何\n"
+"授權條款。\n"
+
+#: lib/kaboutdata.cpp:306
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "這個程式以 %1 的條款散佈。"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:353
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU 通用公共授權第二版"
+
+#: lib/kaboutdata.cpp:356
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:357
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU LGPL 第二版"
+
+#: lib/kaboutdata.cpp:360
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD 授權"
+
+#: lib/kaboutdata.cpp:361
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD 授權"
+
+#: lib/kaboutdata.cpp:364
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "藝術授權"
+
+#: lib/kaboutdata.cpp:365
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "藝術授權"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:369
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q 公開授權"
+
+#: lib/kaboutdata.cpp:372
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:373
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU 通用公共授權第三版"
+
+#: lib/kaboutdata.cpp:376
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:377
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU LGPL 第三版"
+
+#: lib/kaboutdata.cpp:380
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:381
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU LGPL 第2.1版"
+
+#: lib/kaboutdata.cpp:385
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "自訂"
+
+#: lib/kaboutdata.cpp:388
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "未指定"
+
+#: lib/kaboutdata.cpp:937
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>關於 KDE 的中文化</p><blockquote><p>KDE 的正體中文翻譯目前由 <a href="
+"\"http://kde.linux.org.tw/\">KDE 正體中文翻譯團隊</a>維護。若有任何翻譯上的錯"
+"誤與問題,您可以經由下列管道回報:</p><p><ul><li>向<a href=\"mailto:"
+"franklin@kde.org\"> KDE 正體中文翻譯團隊協調人</a>回報。</li><li>到 <a href="
+"\"http://bugs.kde.org\">KDE 的錯誤回報系統</a>上回報(Product 請選擇 i18n,"
+"Component 請選擇 zh_TW)。</li></ul></p><p>KDE 的正體中文翻譯是由許多前輩的努"
+"力才有今日的成就。在此特別感謝過去由李爵樺、薛景中、陳更新、以及黃峻崢等人所"
+"領導的 zh-l10n 中文化計劃,以及來自世界各地的志願工作者所義務參與。過去為了 "
+"KDE 翻譯貢獻的譯者們還包括了Abel Cheung,Joe Man,T.H.Hsieh,Chih-Wei Huang,"
+"Chia-Lin Kao,Yuan-Chen Cheng 等人。因為實在很多,未列出的前輩們敬請見諒。</"
+"p><p>此外我們不要忘了 CLE GNU/Linux 中文計劃協助 Linux 的國際化及中文化基礎架"
+"構。</p><p>若是需要對於 KDE 國際化更進一步的資訊,請參考 <a href=\"http://"
+"l10n.kde.org/\">http://l10n.kde.org/</a></p></blockquote>"
+
+#: lib/kaboutdata.cpp:1165
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "顯示作者資訊。"
+
+#: lib/kaboutdata.cpp:1166
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "顯示版權資訊。"
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "這個應用程式的桌面項目基礎檔案名稱。"
+
+#: lib/kaboutdata.cpp:1169
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "檔案名稱"
+
+#: lib/kaboutdata.cpp:1178
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "這個應用程式是由某個不願透露姓名的人編寫。"
+
+#: lib/kaboutdata.cpp:1180
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 的作者是:"
+
+#: lib/kaboutdata.cpp:1191
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "請使用 http://bugs.kde.org 報告問題。"
+
+#: lib/kaboutdata.cpp:1193
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "請報告問題到 %1。"
+
+#: lib/plugin/kpluginloader.cpp:122
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "函式庫 %1 不提供 KPluginFactory。"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "y"
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "z"
+
+#: lib/util/kformatprivate.cpp:118
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "a"
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "f"
+
+#: lib/util/kformatprivate.cpp:120
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "p"
+
+#: lib/util/kformatprivate.cpp:121
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:122
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "µ"
+
+#: lib/util/kformatprivate.cpp:123
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "k"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Ki"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "M"
+
+#: lib/util/kformatprivate.cpp:126
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mi"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G"
+
+#: lib/util/kformatprivate.cpp:127
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Gi"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "T"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ti"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:129
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pi"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "E"
+
+#: lib/util/kformatprivate.cpp:130
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ei"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "Z"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Zi"
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:132
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:140
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "bit"
+
+#: lib/util/kformatprivate.cpp:143
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B"
+
+#: lib/util/kformatprivate.cpp:146
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:149
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Hz"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:158
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:177
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:228
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:231
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:234
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:237
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:240
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:243
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:246
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:249
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:252
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:258
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:261
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:264
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:267
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:270
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:273
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:276
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:279
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:282
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:288
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:291
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:294
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:297
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:300
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:303
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:306
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:309
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:312
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:351
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2.%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:356
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:360
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h%2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2m%3.%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:370
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:380
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:385 lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:393
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:399
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:414
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 天"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:417
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 小時"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 分鐘"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:423
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 秒"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:428
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n 毫秒"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:446
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n 天"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:451
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n 小時"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:456
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n 分鐘"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:461
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n 秒"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:486 lib/util/kformatprivate.cpp:492
+#: lib/util/kformatprivate.cpp:498
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 又 %2"
+
+#: lib/util/kformatprivate.cpp:509
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "無效的日期"
+
+#: lib/util/kformatprivate.cpp:519
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "明天"
+
+#: lib/util/kformatprivate.cpp:521
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "今天"
+
+#: lib/util/kformatprivate.cpp:523
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "昨天"
+
+#: lib/util/kformatprivate.cpp:529
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Monday"
+msgstr "上星期一"
+
+#: lib/util/kformatprivate.cpp:531
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Tuesday"
+msgstr "上星期二"
+
+#: lib/util/kformatprivate.cpp:533
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Wednesday"
+msgstr "上星期三"
+
+#: lib/util/kformatprivate.cpp:535
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Thursday"
+msgstr "上星期四"
+
+#: lib/util/kformatprivate.cpp:537
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Friday"
+msgstr "上星期五"
+
+#: lib/util/kformatprivate.cpp:539
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Saturday"
+msgstr "上星期六"
+
+#: lib/util/kformatprivate.cpp:541
+msgctxt "KFormat|most recent such day before today"
+msgid "Last Sunday"
+msgstr "上星期日"
+
+#: lib/util/kformatprivate.cpp:546
+msgctxt "KFormat|the next such day after today"
+msgid "Next Monday"
+msgstr "下星期一"
+
+#: lib/util/kformatprivate.cpp:548
+msgctxt "KFormat|the next such day after today"
+msgid "Next Tuesday"
+msgstr "下星期二"
+
+#: lib/util/kformatprivate.cpp:550
+msgctxt "KFormat|the next such day after today"
+msgid "Next Wednesday"
+msgstr "下星期三"
+
+#: lib/util/kformatprivate.cpp:552
+msgctxt "KFormat|the next such day after today"
+msgid "Next Thursday"
+msgstr "下星期四"
+
+#: lib/util/kformatprivate.cpp:554
+msgctxt "KFormat|the next such day after today"
+msgid "Next Friday"
+msgstr "下星期五"
+
+#: lib/util/kformatprivate.cpp:556
+msgctxt "KFormat|the next such day after today"
+msgid "Next Saturday"
+msgstr "下星期六"
+
+#: lib/util/kformatprivate.cpp:558
+msgctxt "KFormat|the next such day after today"
+msgid "Next Sunday"
+msgstr "下星期日"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:573
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
--- /dev/null
+add_subdirectory(lib)
+add_subdirectory(mimetypes)
+
+add_subdirectory(desktoptojson)
--- /dev/null
+#!/bin/sh
+
+# Extract strings from all source files.
+# EXTRACT_TR_STRINGS extracts strings with lupdate and convert them to .pot with
+# lconvert.
+$EXTRACT_TR_STRINGS `find . -name \*.cpp -o -name \*.h -o -name \*.ui -o -name \*.qml` -o $podir/kcoreaddons5_qt.pot
--- /dev/null
+include(ECMMarkNonGuiExecutable)
+
+add_executable(desktoptojson main.cpp desktoptojson.cpp
+ ../lib/plugin/desktopfileparser.cpp)
+if(NOT CMAKE_TOOLCHAIN_FILE)
+ add_executable(KF5::desktoptojson ALIAS desktoptojson)
+endif()
+
+# Mark it as non-gui so we won't create an app bundle on Mac OS X
+ecm_mark_nongui_executable(desktoptojson)
+
+target_link_libraries(desktoptojson Qt5::Core)
+target_compile_definitions(desktoptojson PRIVATE BUILDING_DESKTOPTOJSON_TOOL=1)
+
+install(TARGETS desktoptojson EXPORT KF5CoreAddonsToolingTargets ${KF5_INSTALL_TARGETS_DEFAULT_ARGS})
--- /dev/null
+/******************************************************************************
+ * Copyright 2013 Sebastian Kügler <sebas@kde.org> *
+ * Copyright 2014 Alex Richardson <arichardson.kde@gmail.com> *
+ * *
+ * This library is free software; you can redistribute it and/or *
+ * modify it under the terms of the GNU Lesser General Public *
+ * *
+ * License as published by the Free Software Foundation; either *
+ * version 2.1 of the License, or (at your option) version 3, or any *
+ * later version accepted by the membership of KDE e.V. (or its *
+ * successor approved by the membership of KDE e.V.), which shall *
+ * act as a proxy defined in Section 6 of version 3 of the license. *
+ * *
+ * This library is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
+ * Lesser General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Lesser General Public *
+ * License along with this library. If not, see *
+ * <http://www.gnu.org/licenses/>. *
+ * *
+ ******************************************************************************/
+
+#include "desktoptojson.h"
+#include "../lib/plugin/desktopfileparser_p.h"
+
+
+#include <QDir>
+#include <QFile>
+#include <QJsonDocument>
+#include <QJsonObject>
+#include <QSet>
+#include <QTextStream>
+#include <QJsonArray>
+
+DesktopToJson::DesktopToJson(QCommandLineParser *parser, const QCommandLineOption &i,
+ const QCommandLineOption &o, const QCommandLineOption &v,
+ const QCommandLineOption &c, const QCommandLineOption &s)
+ : m_parser(parser),
+ input(i),
+ output(o),
+ verbose(v),
+ compat(c),
+ serviceTypesOption(s)
+{
+}
+
+bool DesktopFileParser::s_verbose = false;
+bool DesktopFileParser::s_compatibilityMode = false;
+
+
+int DesktopToJson::runMain()
+{
+ if (!m_parser->isSet(input)) {
+ m_parser->showHelp(1);
+ return 1;
+ }
+ if (m_parser->isSet(verbose)) {
+ DesktopFileParser::s_verbose = true;
+ }
+ if (m_parser->isSet(compat)) {
+ DesktopFileParser::s_compatibilityMode = true;
+ }
+ if (!resolveFiles()) {
+ qCCritical(DESKTOPPARSER) << "Failed to resolve filenames" << m_inFile << m_outFile << endl;
+ return 1;
+ }
+
+#pragma message("TODO: make it an error if one of the service type files is invalid or not found")
+ const QStringList serviceTypes = m_parser->values(serviceTypesOption);
+ return convert(m_inFile, m_outFile, serviceTypes) ? EXIT_SUCCESS : EXIT_FAILURE;
+}
+
+bool DesktopToJson::resolveFiles()
+{
+ if (m_parser->isSet(input)) {
+ m_inFile = m_parser->value(input);
+ const QFileInfo fi(m_inFile);
+ if (!fi.exists()) {
+ qCCritical(DESKTOPPARSER) << "File not found: " << m_inFile << endl;
+ return false;
+ }
+ if (!fi.isAbsolute()) {
+ m_inFile = fi.absoluteFilePath();
+ }
+ }
+
+ if (m_parser->isSet(output)) {
+ m_outFile = m_parser->value(output);
+ } else if (!m_inFile.isEmpty()) {
+ m_outFile = m_inFile;
+ m_outFile.replace(QStringLiteral(".desktop"), QStringLiteral(".json"));
+ }
+
+ return m_inFile != m_outFile && !m_inFile.isEmpty() && !m_outFile.isEmpty();
+}
+
+void DesktopFileParser::convertToCompatibilityJson(const QString &key, const QString &value, QJsonObject &json, int lineNr)
+{
+ // XXX: Hidden=true doesn't make sense with json plugins since the metadata is inside the .so
+ static const QStringList boolkeys = QStringList()
+ << QStringLiteral("Hidden") << QStringLiteral("X-KDE-PluginInfo-EnabledByDefault");
+ static const QStringList stringlistkeys = QStringList()
+ << QStringLiteral("X-KDE-ServiceTypes") << QStringLiteral("X-KDE-PluginInfo-Depends");
+ if (boolkeys.contains(key)) {
+ // should only be lower case, but be tolerant here
+ if (value.toLower() == QLatin1String("true")) {
+ json[key] = true;
+ } else {
+ if (value.toLower() != QLatin1String("false")) {
+ qCWarning(DESKTOPPARSER).nospace() << "Expected boolean value for key \"" << key
+ << "\" at line " << lineNr << "but got \"" << value << "\" instead.";
+ }
+ json[key] = false;
+ }
+ } else if (stringlistkeys.contains(key)) {
+ json[key] = QJsonArray::fromStringList(DesktopFileParser::deserializeList(value));
+ } else {
+ json[key] = value;
+ }
+}
+
+bool DesktopToJson::convert(const QString &src, const QString &dest, const QStringList& serviceTypes)
+{
+
+ QJsonObject json;
+ DesktopFileParser::convert(src, serviceTypes, json, nullptr);
+
+ if (DesktopFileParser::s_compatibilityMode) {
+ Q_ASSERT(json.value(QStringLiteral("KPlugin")).toObject().isEmpty());
+ json.remove(QStringLiteral("KPlugin"));
+ }
+ QJsonDocument jdoc;
+ jdoc.setObject(json);
+
+ QFile file(dest);
+ if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
+ qCCritical(DESKTOPPARSER) << "Failed to open " << dest << endl;
+ return false;
+ }
+
+ file.write(jdoc.toJson());
+ qCDebug(DESKTOPPARSER) << "Generated " << dest << endl;
+ return true;
+}
--- /dev/null
+/******************************************************************************
+ * Copyright 2013 Sebastian Kügler <sebas@kde.org> *
+ * *
+ * This library is free software; you can redistribute it and/or *
+ * modify it under the terms of the GNU Lesser General Public *
+ * *
+ * License as published by the Free Software Foundation; either *
+ * version 2.1 of the License, or (at your option) version 3, or any *
+ * later version accepted by the membership of KDE e.V. (or its *
+ * successor approved by the membership of KDE e.V.), which shall *
+ * act as a proxy defined in Section 6 of version 3 of the license. *
+ * *
+ * This library is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
+ * Lesser General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Lesser General Public *
+ * License along with this library. If not, see *
+ * <http://www.gnu.org/licenses/>. *
+ * *
+ ******************************************************************************/
+
+#ifndef DESKTOPTOJSON_H
+#define DESKTOPTOJSON_H
+
+#include <QCommandLineParser>
+#include <QCommandLineOption>
+#include <QString>
+
+class QCommandLineParser;
+
+class DesktopToJson
+{
+public:
+ DesktopToJson(QCommandLineParser *parser, const QCommandLineOption &i,
+ const QCommandLineOption &o, const QCommandLineOption &v,
+ const QCommandLineOption &c, const QCommandLineOption &s);
+ int runMain();
+
+private:
+ bool convert(const QString &src, const QString &dest, const QStringList& serviceTypes);
+ void convertToJson(const QString& key, const QString &value, QJsonObject &json, QJsonObject &kplugin, int lineNr);
+ void convertToCompatibilityJson(const QString &key, const QString &value, QJsonObject &json, int lineNr);
+ bool resolveFiles();
+
+ QCommandLineParser *m_parser;
+ QCommandLineOption input;
+ QCommandLineOption output;
+ QCommandLineOption verbose;
+ QCommandLineOption compat;
+ QCommandLineOption serviceTypesOption;
+ QString m_inFile;
+ QString m_outFile;
+};
+
+#endif
--- /dev/null
+/******************************************************************************
+ * Copyright 2013 Sebastian Kügler <sebas@kde.org> *
+ * Copyright 2014 Alex Richardson <arichardson.kde@gmail.com> *
+ * This library is free software; you can redistribute it and/or *
+ * modify it under the terms of the GNU Lesser General Public *
+ * *
+ * License as published by the Free Software Foundation; either *
+ * version 2.1 of the License, or (at your option) version 3, or any *
+ * later version accepted by the membership of KDE e.V. (or its *
+ * successor approved by the membership of KDE e.V.), which shall *
+ * act as a proxy defined in Section 6 of version 3 of the license. *
+ * *
+ * This library is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
+ * Lesser General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Lesser General Public *
+ * License along with this library. If not, see *
+ * <http://www.gnu.org/licenses/>. *
+ * *
+ ******************************************************************************/
+
+#include "desktoptojson.h"
+
+#include <QDebug>
+
+static void messageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg)
+{
+ QByteArray localMsg = msg.toLocal8Bit();
+ switch (type) {
+ case QtDebugMsg:
+ fprintf(stdout, "%s\n", localMsg.constData());
+ break;
+ case QtInfoMsg:
+ fprintf(stdout, "Info: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function);
+ break;
+ case QtWarningMsg:
+ fprintf(stderr, "Warning: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function);
+ break;
+ case QtCriticalMsg:
+ fprintf(stderr, "Error: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function);
+ break;
+ case QtFatalMsg:
+ fprintf(stderr, "Fatal: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function);
+ abort();
+ }
+}
+
+
+int main(int argc, char** argv) {
+ qInstallMessageHandler(messageOutput);
+ QCoreApplication app(argc, argv);
+
+ const QString description = QStringLiteral("Converts desktop files to json");
+ app.setApplicationVersion(QStringLiteral("1.0"));
+
+ const static auto _i = QStringLiteral("input");
+ const static auto _o = QStringLiteral("output");
+ const static auto _n = QStringLiteral("name");
+ const static auto _c = QStringLiteral("compat");
+ const static auto _s = QStringLiteral("serviceType");
+
+ QCommandLineOption input = QCommandLineOption(QStringList() << QStringLiteral("i") << _i,
+ QStringLiteral("Read input from file"), _n);
+ QCommandLineOption output = QCommandLineOption(QStringList() << QStringLiteral("o") << _o,
+ QStringLiteral("Write output to file"), _n);
+ QCommandLineOption verbose = QCommandLineOption(QStringList() << QStringLiteral("verbose"),
+ QStringLiteral("Enable verbose (debug) output"));
+ QCommandLineOption compat = QCommandLineOption(QStringList() << QStringLiteral("c") << _c,
+ QStringLiteral("Generate JSON that is compatible with KPluginInfo instead of the new KPluginMetaData"));
+ QCommandLineOption serviceTypes = QCommandLineOption(QStringList() << QStringLiteral("s") << _s,
+ QStringLiteral("The name or full path of a KServiceType definition .desktop file. Can be passed multiple times"), _s);
+
+ QCommandLineParser parser;
+ parser.addVersionOption();
+ parser.setApplicationDescription(description);
+ parser.addHelpOption();
+ parser.addOption(input);
+ parser.addOption(output);
+ parser.addOption(verbose);
+ parser.addOption(compat);
+ parser.addOption(serviceTypes);
+
+ DesktopToJson dtj(&parser, input, output, verbose, compat, serviceTypes);
+
+ parser.process(app);
+ return dtj.runMain();
+}
--- /dev/null
+# Configure checks for the caching subdir
+include(CheckIncludeFiles)
+check_include_files("sys/types.h;sys/mman.h" HAVE_SYS_MMAN_H)
+configure_file(caching/config-caching.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-caching.h)
+
+include(CheckSymbolExists)
+check_symbol_exists("getgrouplist" "grp.h" HAVE_GETGROUPLIST)
+configure_file(util/config-getgrouplist.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-getgrouplist.h)
+
+set (KDE4_DEFAULT_HOME ".kde${_KDE4_DEFAULT_HOME_POSTFIX}" CACHE STRING "The default KDE home directory" )
+configure_file(util/config-kde4home.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-kde4home.h)
+
+set (ACCOUNTS_SERVICE_ICON_DIR "/var/lib/AccountsService/icons" CACHE STRING "Accounts Services icon storage directory")
+configure_file(util/config-accountsservice.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-accountsservice.h)
+
+ecm_create_qm_loader(kcoreaddons_QM_LOADER kcoreaddons5_qt)
+
+set(kcoreaddons_OPTIONAL_SRCS )
+set(kcoreaddons_OPTIONAL_LIBS )
+
+if (FAM_FOUND)
+ include_directories(${FAM_INCLUDE_DIR})
+ set(kcoreaddons_OPTIONAL_LIBS ${kcoreaddons_OPTIONAL_LIBS} ${FAM_LIBRARIES})
+endif ()
+
+if (Inotify_FOUND)
+ include_directories(${Inotify_INCLUDE_DIRS})
+ set(kcoreaddons_OPTIONAL_LIBS ${kcoreaddons_OPTIONAL_LIBS} ${Inotify_LIBRARIES})
+endif ()
+
+if(NOT WIN32)
+ set(kcoreaddons_OPTIONAL_SRCS caching/kshareddatacache.cpp)
+ set(kcoreaddons_OPTIONAL_LIBS ${kcoreaddons_OPTIONAL_LIBS} ${CMAKE_THREAD_LIBS_INIT})
+
+ set_source_files_properties(caching/kshareddatacache.cpp
+ PROPERTIES COMPILE_FLAGS -fexceptions)
+
+else()
+ set(kcoreaddons_OPTIONAL_SRCS
+ caching/kshareddatacache_win.cpp
+ )
+endif()
+
+if (WIN32)
+ set(kcoreaddons_OPTIONAL_SRCS
+ ${kcoreaddons_OPTIONAL_SRCS}
+ text/kmacroexpander_win.cpp
+ util/kshell_win.cpp
+ util/kuser_win.cpp
+ )
+endif ()
+
+if (UNIX)
+ set(kcoreaddons_OPTIONAL_SRCS
+ ${kcoreaddons_OPTIONAL_SRCS}
+ text/kmacroexpander_unix.cpp
+ util/kuser_unix.cpp
+ util/kshell_unix.cpp
+ )
+endif ()
+
+set(libkcoreaddons_SRCS
+ kaboutdata.cpp
+ kcoreaddons.cpp
+ io/kautosavefile.cpp
+ io/kdirwatch.cpp
+ io/kfilesystemtype.cpp
+ io/kmessage.cpp
+ io/kprocess.cpp
+ io/kbackup.cpp
+ io/kurlmimedata.cpp
+ jobs/kcompositejob.cpp
+ jobs/kjob.cpp
+ jobs/kjobtrackerinterface.cpp
+ jobs/kjobuidelegate.cpp
+ plugin/kpluginfactory.cpp
+ plugin/kpluginloader.cpp
+ plugin/kpluginmetadata.cpp
+ plugin/desktopfileparser.cpp
+ randomness/krandom.cpp
+ randomness/krandomsequence.cpp
+ text/kmacroexpander.cpp
+ text/kstringhandler.cpp
+ text/ktexttohtml.cpp
+ util/kdelibs4migration.cpp
+ util/kdelibs4configmigrator.cpp
+ util/kformat.cpp
+ util/kformatprivate.cpp
+ util/kshell.cpp
+ ${kcoreaddons_OPTIONAL_SRCS}
+ ${kcoreaddons_QM_LOADER}
+)
+
+
+set(kcoreaddons_INCLUDE_DIRS
+ ${CMAKE_CURRENT_BINARY_DIR}/../.. # for kcoreaddons_version.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/caching/
+ ${CMAKE_CURRENT_BINARY_DIR}/io/
+ ${CMAKE_CURRENT_SOURCE_DIR}/io/
+ ${CMAKE_CURRENT_SOURCE_DIR}/jobs/
+ ${CMAKE_CURRENT_SOURCE_DIR}/plugin/
+ ${CMAKE_CURRENT_SOURCE_DIR}/randomness/
+ ${CMAKE_CURRENT_SOURCE_DIR}/text/
+ ${CMAKE_CURRENT_SOURCE_DIR}/util/
+)
+
+ecm_qt_declare_logging_category(libkcoreaddons_SRCS
+ HEADER kcoreaddons_debug.h
+ IDENTIFIER KCOREADDONS_DEBUG
+ CATEGORY_NAME org.kde.kcoreaddons)
+
+add_library(KF5CoreAddons ${libkcoreaddons_SRCS})
+generate_export_header(KF5CoreAddons BASE_NAME KCoreAddons)
+add_library(KF5::CoreAddons ALIAS KF5CoreAddons)
+
+target_include_directories(KF5CoreAddons PUBLIC "$<BUILD_INTERFACE:${kcoreaddons_INCLUDE_DIRS}>")
+
+target_link_libraries(KF5CoreAddons
+ PUBLIC
+ Qt5::Core
+ PRIVATE
+ ${kcoreaddons_OPTIONAL_LIBS}
+)
+
+target_link_libraries(KF5CoreAddons PRIVATE ${CMAKE_THREAD_LIBS_INIT})
+
+if(WIN32)
+ target_link_libraries(KF5CoreAddons PRIVATE netapi32 userenv)
+endif()
+
+target_include_directories(KF5CoreAddons INTERFACE "$<INSTALL_INTERFACE:${KDE_INSTALL_INCLUDEDIR_KF5}/KCoreAddons>" )
+
+target_compile_definitions(KF5CoreAddons INTERFACE "$<INSTALL_INTERFACE:KCOREADDONS_LIB>")
+
+set_target_properties(KF5CoreAddons PROPERTIES VERSION ${KCOREADDONS_VERSION_STRING}
+ SOVERSION ${KCOREADDONS_SOVERSION}
+ EXPORT_NAME CoreAddons
+)
+
+ecm_generate_headers(KCoreAddons_HEADERS
+ HEADER_NAMES
+ KAboutData
+ KCoreAddons
+ REQUIRED_HEADERS KCoreAddons_HEADERS
+)
+ecm_generate_headers(KCoreAddons_HEADERS
+ HEADER_NAMES KSharedDataCache
+ RELATIVE caching
+ REQUIRED_HEADERS KCoreAddons_HEADERS
+)
+ecm_generate_headers(KCoreAddons_HEADERS
+ HEADER_NAMES
+ KAutoSaveFile
+ KDirWatch
+ KMessage
+ KProcess
+ KBackup
+ KUrlMimeData
+ KFileSystemType
+ RELATIVE io
+ REQUIRED_HEADERS KCoreAddons_HEADERS
+)
+ecm_generate_headers(KCoreAddons_HEADERS
+ HEADER_NAMES
+ KCompositeJob
+ KJob
+ KJobTrackerInterface
+ KJobUiDelegate
+ RELATIVE jobs
+ REQUIRED_HEADERS KCoreAddons_HEADERS
+)
+ecm_generate_headers(KCoreAddons_HEADERS
+ HEADER_NAMES
+ KExportPlugin
+ KPluginFactory
+ KPluginLoader
+ KPluginMetaData
+ RELATIVE plugin
+ REQUIRED_HEADERS KCoreAddons_HEADERS
+)
+ecm_generate_headers(KCoreAddons_HEADERS
+ HEADER_NAMES
+ KRandom
+ KRandomSequence
+ RELATIVE randomness
+ REQUIRED_HEADERS KCoreAddons_HEADERS
+)
+ecm_generate_headers(KCoreAddons_HEADERS
+ HEADER_NAMES
+ KMacroExpander
+ KStringHandler
+ KTextToHTML
+ KTextToHTMLEmoticonsInterface
+ RELATIVE text
+ REQUIRED_HEADERS KCoreAddons_HEADERS
+)
+ecm_generate_headers(KCoreAddons_HEADERS
+ HEADER_NAMES
+ KFormat
+ KUser
+ KShell
+ Kdelibs4Migration
+ Kdelibs4ConfigMigrator
+ RELATIVE util
+ REQUIRED_HEADERS KCoreAddons_HEADERS
+)
+
+find_package(PythonModuleGeneration)
+
+if (PythonModuleGeneration_FOUND)
+ ecm_generate_python_binding(
+ TARGET KF5::CoreAddons
+ PYTHONNAMESPACE PyKF5
+ MODULENAME KCoreAddons
+ RULES_FILE "${CMAKE_SOURCE_DIR}/cmake/rules_PyKF5.py"
+ SIP_DEPENDS
+ QtCore/QtCoremod.sip
+ HEADERS
+ kaboutdata.h
+ kcoreaddons.h
+ caching/kshareddatacache.h
+ io/kautosavefile.h
+ io/kdirwatch.h
+ io/kmessage.h
+ io/kprocess.h
+ io/kbackup.h
+ io/kurlmimedata.h
+ io/kfilesystemtype.h
+ jobs/kcompositejob.h
+ jobs/kjob.h
+ jobs/kjobtrackerinterface.h
+ jobs/kjobuidelegate.h
+ plugin/kexportplugin.h
+ plugin/kpluginfactory.h
+ plugin/kpluginloader.h
+ plugin/kpluginmetadata.h
+ randomness/krandom.h
+ randomness/krandomsequence.h
+ text/kmacroexpander.h
+ text/kstringhandler.h
+ text/ktexttohtml.h
+ text/ktexttohtmlemoticonsinterface.h
+ util/kformat.h
+ util/kuser.h
+ util/kshell.h
+ util/kdelibs4migration.h
+ util/kdelibs4configmigrator.h
+ )
+endif()
+
+install(TARGETS KF5CoreAddons EXPORT KF5CoreAddonsTargets ${KF5_INSTALL_TARGETS_DEFAULT_ARGS})
+
+install(FILES
+ ${KCoreAddons_HEADERS}
+ ${CMAKE_CURRENT_BINARY_DIR}/kcoreaddons_export.h
+ DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF5}/KCoreAddons COMPONENT Devel
+)
+
+# Includes CMake code to install open-source license texts for KAboutData.
+add_subdirectory(licenses)
+
+if(BUILD_QCH)
+ ecm_add_qch(
+ KF5CoreAddons_QCH
+ NAME KCoreAddons
+ BASE_NAME KF5CoreAddons
+ VERSION ${KF5_VERSION}
+ ORG_DOMAIN org.kde
+ SOURCES # using only public headers, to cover only public API
+ ${KCoreAddons_HEADERS}
+ MD_MAINPAGE "${CMAKE_SOURCE_DIR}/README.md"
+ LINK_QCHS
+ Qt5Core_QCH
+ BLANK_MACROS
+ KCOREADDONS_EXPORT
+ KCOREADDONS_DEPRECATED
+ KCOREADDONS_DEPRECATED_EXPORT
+ TAGFILE_INSTALL_DESTINATION ${KDE_INSTALL_QTQCHDIR}
+ QCH_INSTALL_DESTINATION ${KDE_INSTALL_QTQCHDIR}
+ COMPONENT Devel
+ )
+endif()
+
+include(ECMGeneratePriFile)
+ecm_generate_pri_file(BASE_NAME KCoreAddons LIB_NAME KF5CoreAddons DEPS "core" FILENAME_VAR PRI_FILENAME INCLUDE_INSTALL_DIR ${KDE_INSTALL_INCLUDEDIR_KF5}/KCoreAddons)
+install(FILES ${PRI_FILENAME} DESTINATION ${ECM_MKSPECS_INSTALL_DIR})
--- /dev/null
+#cmakedefine01 HAVE_SYS_MMAN_H
+
--- /dev/null
+/*
+ * This file is part of the KDE project.
+ * Copyright © 2010, 2012 Michael Pyne <mpyne@kde.org>
+ * Copyright © 2012 Ralf Jung <ralfjung-e@gmx.de>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License version 2 as published by the Free Software Foundation.
+ *
+ * This library includes "MurmurHash" code from Austin Appleby, which is
+ * placed in the public domain. See http://sites.google.com/site/murmurhash/
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "kshareddatacache.h"
+#include "kshareddatacache_p.h" // Various auxiliary support code
+#include "kcoreaddons_debug.h"
+
+#include "qstandardpaths.h"
+#include <qplatformdefs.h>
+
+#include <krandom.h>
+
+#include <QDateTime>
+#include <QDebug>
+#include <QSharedPointer>
+#include <QByteArray>
+#include <QFile>
+#include <QAtomicInt>
+#include <QList>
+#include <QMutex>
+#include <QMutexLocker>
+#include <QDir>
+
+#include <sys/types.h>
+#include <sys/mman.h>
+#include <stdlib.h>
+
+/// The maximum number of probes to make while searching for a bucket in
+/// the presence of collisions in the cache index table.
+static const uint MAX_PROBE_COUNT = 6;
+
+/**
+ * A very simple class whose only purpose is to be thrown as an exception from
+ * underlying code to indicate that the shared cache is apparently corrupt.
+ * This must be caught by top-level library code and used to unlink the cache
+ * in this circumstance.
+ *
+ * @internal
+ */
+class KSDCCorrupted
+{
+public:
+ KSDCCorrupted()
+ {
+ qCritical() << "Error detected in cache, re-generating";
+ }
+};
+
+//-----------------------------------------------------------------------------
+// MurmurHashAligned, by Austin Appleby
+// (Released to the public domain, or licensed under the MIT license where
+// software may not be released to the public domain. See
+// http://sites.google.com/site/murmurhash/)
+
+// Same algorithm as MurmurHash, but only does aligned reads - should be safer
+// on certain platforms.
+static unsigned int MurmurHashAligned(const void *key, int len, unsigned int seed)
+{
+ const unsigned int m = 0xc6a4a793;
+ const int r = 16;
+
+ const unsigned char *data = reinterpret_cast<const unsigned char *>(key);
+
+ unsigned int h = seed ^ (len * m);
+
+ int align = reinterpret_cast<quintptr>(data) & 3;
+
+ if (align && len >= 4) {
+ // Pre-load the temp registers
+
+ unsigned int t = 0, d = 0;
+
+ switch (align) {
+ case 1: t |= data[2] << 16;
+ case 2: t |= data[1] << 8;
+ case 3: t |= data[0];
+ }
+
+ t <<= (8 * align);
+
+ data += 4 - align;
+ len -= 4 - align;
+
+ int sl = 8 * (4 - align);
+ int sr = 8 * align;
+
+ // Mix
+
+ while (len >= 4) {
+ d = *reinterpret_cast<const unsigned int *>(data);
+ t = (t >> sr) | (d << sl);
+ h += t;
+ h *= m;
+ h ^= h >> r;
+ t = d;
+
+ data += 4;
+ len -= 4;
+ }
+
+ // Handle leftover data in temp registers
+
+ int pack = len < align ? len : align;
+
+ d = 0;
+
+ switch (pack) {
+ case 3: d |= data[2] << 16;
+ case 2: d |= data[1] << 8;
+ case 1: d |= data[0];
+ case 0: h += (t >> sr) | (d << sl);
+ h *= m;
+ h ^= h >> r;
+ }
+
+ data += pack;
+ len -= pack;
+ } else {
+ while (len >= 4) {
+ h += *reinterpret_cast<const unsigned int *>(data);
+ h *= m;
+ h ^= h >> r;
+
+ data += 4;
+ len -= 4;
+ }
+ }
+
+ //----------
+ // Handle tail bytes
+
+ switch (len) {
+ case 3: h += data[2] << 16;
+ case 2: h += data[1] << 8;
+ case 1: h += data[0];
+ h *= m;
+ h ^= h >> r;
+ };
+
+ h *= m;
+ h ^= h >> 10;
+ h *= m;
+ h ^= h >> 17;
+
+ return h;
+}
+
+/**
+ * This is the hash function used for our data to hopefully make the
+ * hashing used to place the QByteArrays as efficient as possible.
+ */
+static quint32 generateHash(const QByteArray &buffer)
+{
+ // The final constant is the "seed" for MurmurHash. Do *not* change it
+ // without incrementing the cache version.
+ return MurmurHashAligned(buffer.data(), buffer.size(), 0xF0F00F0F);
+}
+
+// Alignment concerns become a big deal when we're dealing with shared memory,
+// since trying to access a structure sized at, say 8 bytes at an address that
+// is not evenly divisible by 8 is a crash-inducing error on some
+// architectures. The compiler would normally take care of this, but with
+// shared memory the compiler will not necessarily know the alignment expected,
+// so make sure we account for this ourselves. To do so we need a way to find
+// out the expected alignment. Enter ALIGNOF...
+#ifndef ALIGNOF
+#if defined(Q_CC_GNU) || defined(Q_CC_SUN)
+#define ALIGNOF(x) (__alignof__ (x)) // GCC provides what we want directly
+#else
+
+#include <stddef.h> // offsetof
+
+template<class T>
+struct __alignmentHack {
+ char firstEntry;
+ T obj;
+ static const size_t size = offsetof(__alignmentHack, obj);
+};
+#define ALIGNOF(x) (__alignmentHack<x>::size)
+#endif // Non gcc
+#endif // ALIGNOF undefined
+
+// Returns a pointer properly aligned to handle size alignment.
+// size should be a power of 2. start is assumed to be the lowest
+// permissible address, therefore the return value will be >= start.
+template<class T>
+T *alignTo(const void *start, uint size = ALIGNOF(T))
+{
+ quintptr mask = size - 1;
+
+ // Cast to int-type to handle bit-twiddling
+ quintptr basePointer = reinterpret_cast<quintptr>(start);
+
+ // If (and only if) we are already aligned, adding mask into basePointer
+ // will not increment any of the bits in ~mask and we get the right answer.
+ basePointer = (basePointer + mask) & ~mask;
+
+ return reinterpret_cast<T *>(basePointer);
+}
+
+/**
+ * Returns a pointer to a const object of type T, assumed to be @p offset
+ * *BYTES* greater than the base address. Note that in order to meet alignment
+ * requirements for T, it is possible that the returned pointer points greater
+ * than @p offset into @p base.
+ */
+template<class T>
+const T *offsetAs(const void *const base, qint32 offset)
+{
+ const char *ptr = reinterpret_cast<const char *>(base);
+ return alignTo<const T>(ptr + offset);
+}
+
+// Same as above, but for non-const objects
+template<class T>
+T *offsetAs(void *const base, qint32 offset)
+{
+ char *ptr = reinterpret_cast<char *>(base);
+ return alignTo<T>(ptr + offset);
+}
+
+/**
+ * @return the smallest integer greater than or equal to (@p a / @p b).
+ * @param a Numerator, should be ≥ 0.
+ * @param b Denominator, should be > 0.
+ */
+static unsigned intCeil(unsigned a, unsigned b)
+{
+ // The overflow check is unsigned and so is actually defined behavior.
+ if (Q_UNLIKELY(b == 0 || ((a + b) < a))) {
+ throw KSDCCorrupted();
+ }
+
+ return (a + b - 1) / b;
+}
+
+/**
+ * @return number of set bits in @p value (see also "Hamming weight")
+ */
+static unsigned countSetBits(unsigned value)
+{
+ // K&R / Wegner's algorithm used. GCC supports __builtin_popcount but we
+ // expect there to always be only 1 bit set so this should be perhaps a bit
+ // faster 99.9% of the time.
+ unsigned count = 0;
+ for (count = 0; value != 0; count++) {
+ value &= (value - 1); // Clears least-significant set bit.
+ }
+ return count;
+}
+
+typedef qint32 pageID;
+
+// =========================================================================
+// Description of the cache:
+//
+// The shared memory cache is designed to be handled as two separate objects,
+// all contained in the same global memory segment. First off, there is the
+// basic header data, consisting of the global header followed by the
+// accounting data necessary to hold items (described in more detail
+// momentarily). Following the accounting data is the start of the "page table"
+// (essentially just as you'd see it in an Operating Systems text).
+//
+// The page table contains shared memory split into fixed-size pages, with a
+// configurable page size. In the event that the data is too large to fit into
+// a single logical page, it will need to occupy consecutive pages of memory.
+//
+// The accounting data that was referenced earlier is split into two:
+//
+// 1. index table, containing a fixed-size list of possible cache entries.
+// Each index entry is of type IndexTableEntry (below), and holds the various
+// accounting data and a pointer to the first page.
+//
+// 2. page table, which is used to speed up the process of searching for
+// free pages of memory. There is one entry for every page in the page table,
+// and it contains the index of the one entry in the index table actually
+// holding the page (or <0 if the page is free).
+//
+// The entire segment looks like so:
+// ?════════?═════════════?════════════?═══════?═══════?═══════?═══════?═══?
+// ? Header │ Index Table │ Page Table ? Pages │ │ │ │...?
+// ?════════?═════════════?════════════?═══════?═══════?═══════?═══════?═══?
+// =========================================================================
+
+// All elements of this struct must be "plain old data" (POD) types since it
+// will be in shared memory. In addition, no pointers! To point to something
+// you must use relative offsets since the pointer start addresses will be
+// different in each process.
+struct IndexTableEntry {
+ uint fileNameHash;
+ uint totalItemSize; // in bytes
+ mutable uint useCount;
+ time_t addTime;
+ mutable time_t lastUsedTime;
+ pageID firstPage;
+};
+
+// Page table entry
+struct PageTableEntry {
+ // int so we can use values <0 for unassigned pages.
+ qint32 index;
+};
+
+// Each individual page contains the cached data. The first page starts off with
+// the utf8-encoded key, a null '\0', and then the data follows immediately
+// from the next byte, possibly crossing consecutive page boundaries to hold
+// all of the data.
+// There is, however, no specific struct for a page, it is simply a location in
+// memory.
+
+// This is effectively the layout of the shared memory segment. The variables
+// contained within form the header, data contained afterwards is pointed to
+// by using special accessor functions.
+struct SharedMemory {
+ /**
+ * Note to downstream packagers: This version flag is intended to be
+ * machine-specific. The KDE-provided source code will not set the lower
+ * two bits to allow for distribution-specific needs, with the exception
+ * of version 1 which was already defined in KDE Platform 4.5.
+ * e.g. the next version bump will be from 4 to 8, then 12, etc.
+ */
+ enum {
+ PIXMAP_CACHE_VERSION = 12,
+ MINIMUM_CACHE_SIZE = 4096
+ };
+
+ // Note to those who follow me. You should not, under any circumstances, ever
+ // re-arrange the following two fields, even if you change the version number
+ // for later revisions of this code.
+ QAtomicInt ready; ///< DO NOT INITIALIZE
+ quint8 version;
+
+ // See kshareddatacache_p.h
+ SharedLock shmLock;
+
+ uint cacheSize;
+ uint cacheAvail;
+ QAtomicInt evictionPolicy;
+
+ // pageSize and cacheSize determine the number of pages. The number of
+ // pages determine the page table size and (indirectly) the index table
+ // size.
+ QAtomicInt pageSize;
+
+ // This variable is added to reserve space for later cache timestamping
+ // support. The idea is this variable will be updated when the cache is
+ // written to, to allow clients to detect a changed cache quickly.
+ QAtomicInt cacheTimestamp;
+
+ /**
+ * Converts the given average item size into an appropriate page size.
+ */
+ static unsigned equivalentPageSize(unsigned itemSize)
+ {
+ if (itemSize == 0) {
+ return 4096; // Default average item size.
+ }
+
+ int log2OfSize = 0;
+ while ((itemSize >>= 1) != 0) {
+ log2OfSize++;
+ }
+
+ // Bound page size between 512 bytes and 256 KiB.
+ // If this is adjusted, also alter validSizeMask in cachePageSize
+ log2OfSize = qBound(9, log2OfSize, 18);
+
+ return (1 << log2OfSize);
+ }
+
+ // Returns pageSize in unsigned format.
+ unsigned cachePageSize() const
+ {
+ unsigned _pageSize = static_cast<unsigned>(pageSize.load());
+ // bits 9-18 may be set.
+ static const unsigned validSizeMask = 0x7FE00u;
+
+ // Check for page sizes that are not a power-of-2, or are too low/high.
+ if (Q_UNLIKELY(countSetBits(_pageSize) != 1 || (_pageSize & ~validSizeMask))) {
+ throw KSDCCorrupted();
+ }
+
+ return _pageSize;
+ }
+
+ /**
+ * This is effectively the class ctor. But since we're in shared memory,
+ * there's a few rules:
+ *
+ * 1. To allow for some form of locking in the initial-setup case, we
+ * use an atomic int, which will be initialized to 0 by mmap(). Then to
+ * take the lock we atomically increment the 0 to 1. If we end up calling
+ * the QAtomicInt constructor we can mess that up, so we can't use a
+ * constructor for this class either.
+ * 2. Any member variable you add takes up space in shared memory as well,
+ * so make sure you need it.
+ */
+ bool performInitialSetup(uint _cacheSize, uint _pageSize)
+ {
+ if (_cacheSize < MINIMUM_CACHE_SIZE) {
+ qCritical() << "Internal error: Attempted to create a cache sized < "
+ << MINIMUM_CACHE_SIZE;
+ return false;
+ }
+
+ if (_pageSize == 0) {
+ qCritical() << "Internal error: Attempted to create a cache with 0-sized pages.";
+ return false;
+ }
+
+ shmLock.type = findBestSharedLock();
+ if (shmLock.type == LOCKTYPE_INVALID) {
+ qCritical() << "Unable to find an appropriate lock to guard the shared cache. "
+ << "This *should* be essentially impossible. :(";
+ return false;
+ }
+
+ bool isProcessShared = false;
+ QSharedPointer<KSDCLock> tempLock(createLockFromId(shmLock.type, shmLock));
+
+ if (!tempLock->initialize(isProcessShared)) {
+ qCritical() << "Unable to initialize the lock for the cache!";
+ return false;
+ }
+
+ if (!isProcessShared) {
+ qCWarning(KCOREADDONS_DEBUG) << "Cache initialized, but does not support being"
+ << "shared across processes.";
+ }
+
+ // These must be updated to make some of our auxiliary functions
+ // work right since their values will be based on the cache size.
+ cacheSize = _cacheSize;
+ pageSize = _pageSize;
+ version = PIXMAP_CACHE_VERSION;
+ cacheTimestamp = static_cast<unsigned>(::time(nullptr));
+
+ clearInternalTables();
+
+ // Unlock the mini-lock, and introduce a total memory barrier to make
+ // sure all changes have propagated even without a mutex.
+ ready.ref();
+
+ return true;
+ }
+
+ void clearInternalTables()
+ {
+ // Assumes we're already locked somehow.
+ cacheAvail = pageTableSize();
+
+ // Setup page tables to point nowhere
+ PageTableEntry *table = pageTable();
+ for (uint i = 0; i < pageTableSize(); ++i) {
+ table[i].index = -1;
+ }
+
+ // Setup index tables to be accurate.
+ IndexTableEntry *indices = indexTable();
+ for (uint i = 0; i < indexTableSize(); ++i) {
+ indices[i].firstPage = -1;
+ indices[i].useCount = 0;
+ indices[i].fileNameHash = 0;
+ indices[i].totalItemSize = 0;
+ indices[i].addTime = 0;
+ indices[i].lastUsedTime = 0;
+ }
+ }
+
+ const IndexTableEntry *indexTable() const
+ {
+ // Index Table goes immediately after this struct, at the first byte
+ // where alignment constraints are met (accounted for by offsetAs).
+ return offsetAs<IndexTableEntry>(this, sizeof(*this));
+ }
+
+ const PageTableEntry *pageTable() const
+ {
+ const IndexTableEntry *base = indexTable();
+ base += indexTableSize();
+
+ // Let's call wherever we end up the start of the page table...
+ return alignTo<PageTableEntry>(base);
+ }
+
+ const void *cachePages() const
+ {
+ const PageTableEntry *tableStart = pageTable();
+ tableStart += pageTableSize();
+
+ // Let's call wherever we end up the start of the data...
+ return alignTo<void>(tableStart, cachePageSize());
+ }
+
+ const void *page(pageID at) const
+ {
+ if (static_cast<uint>(at) >= pageTableSize()) {
+ return nullptr;
+ }
+
+ // We must manually calculate this one since pageSize varies.
+ const char *pageStart = reinterpret_cast<const char *>(cachePages());
+ pageStart += (at * cachePageSize());
+
+ return reinterpret_cast<const void *>(pageStart);
+ }
+
+ // The following are non-const versions of some of the methods defined
+ // above. They use const_cast<> because I feel that is better than
+ // duplicating the code. I suppose template member functions (?)
+ // may work, may investigate later.
+ IndexTableEntry *indexTable()
+ {
+ const SharedMemory *that = const_cast<const SharedMemory *>(this);
+ return const_cast<IndexTableEntry *>(that->indexTable());
+ }
+
+ PageTableEntry *pageTable()
+ {
+ const SharedMemory *that = const_cast<const SharedMemory *>(this);
+ return const_cast<PageTableEntry *>(that->pageTable());
+ }
+
+ void *cachePages()
+ {
+ const SharedMemory *that = const_cast<const SharedMemory *>(this);
+ return const_cast<void *>(that->cachePages());
+ }
+
+ void *page(pageID at)
+ {
+ const SharedMemory *that = const_cast<const SharedMemory *>(this);
+ return const_cast<void *>(that->page(at));
+ }
+
+ uint pageTableSize() const
+ {
+ return cacheSize / cachePageSize();
+ }
+
+ uint indexTableSize() const
+ {
+ // Assume 2 pages on average are needed -> the number of entries
+ // would be half of the number of pages.
+ return pageTableSize() / 2;
+ }
+
+ /**
+ * @return the index of the first page, for the set of contiguous
+ * pages that can hold @p pagesNeeded PAGES.
+ */
+ pageID findEmptyPages(uint pagesNeeded) const
+ {
+ if (Q_UNLIKELY(pagesNeeded > pageTableSize())) {
+ return pageTableSize();
+ }
+
+ // Loop through the page table, find the first empty page, and just
+ // makes sure that there are enough free pages.
+ const PageTableEntry *table = pageTable();
+ uint contiguousPagesFound = 0;
+ pageID base = 0;
+ for (pageID i = 0; i < static_cast<int>(pageTableSize()); ++i) {
+ if (table[i].index < 0) {
+ if (contiguousPagesFound == 0) {
+ base = i;
+ }
+ contiguousPagesFound++;
+ } else {
+ contiguousPagesFound = 0;
+ }
+
+ if (contiguousPagesFound == pagesNeeded) {
+ return base;
+ }
+ }
+
+ return pageTableSize();
+ }
+
+ // left < right?
+ static bool lruCompare(const IndexTableEntry &l, const IndexTableEntry &r)
+ {
+ // Ensure invalid entries migrate to the end
+ if (l.firstPage < 0 && r.firstPage >= 0) {
+ return false;
+ }
+ if (l.firstPage >= 0 && r.firstPage < 0) {
+ return true;
+ }
+
+ // Most recently used will have the highest absolute time =>
+ // least recently used (lowest) should go first => use left < right
+ return l.lastUsedTime < r.lastUsedTime;
+ }
+
+ // left < right?
+ static bool seldomUsedCompare(const IndexTableEntry &l, const IndexTableEntry &r)
+ {
+ // Ensure invalid entries migrate to the end
+ if (l.firstPage < 0 && r.firstPage >= 0) {
+ return false;
+ }
+ if (l.firstPage >= 0 && r.firstPage < 0) {
+ return true;
+ }
+
+ // Put lowest use count at start by using left < right
+ return l.useCount < r.useCount;
+ }
+
+ // left < right?
+ static bool ageCompare(const IndexTableEntry &l, const IndexTableEntry &r)
+ {
+ // Ensure invalid entries migrate to the end
+ if (l.firstPage < 0 && r.firstPage >= 0) {
+ return false;
+ }
+ if (l.firstPage >= 0 && r.firstPage < 0) {
+ return true;
+ }
+
+ // Oldest entries die first -- they have the lowest absolute add time,
+ // so just like the others use left < right
+ return l.addTime < r.addTime;
+ }
+
+ void defragment()
+ {
+ if (cacheAvail * cachePageSize() == cacheSize) {
+ return; // That was easy
+ }
+
+ qCDebug(KCOREADDONS_DEBUG) << "Defragmenting the shared cache";
+
+ // Just do a linear scan, and anytime there is free space, swap it
+ // with the pages to its right. In order to meet the precondition
+ // we need to skip any used pages first.
+
+ pageID currentPage = 0;
+ pageID idLimit = static_cast<pageID>(pageTableSize());
+ PageTableEntry *pages = pageTable();
+
+ if (Q_UNLIKELY(!pages || idLimit <= 0)) {
+ throw KSDCCorrupted();
+ }
+
+ // Skip used pages
+ while (currentPage < idLimit && pages[currentPage].index >= 0) {
+ ++currentPage;
+ }
+
+ pageID freeSpot = currentPage;
+
+ // Main loop, starting from a free page, skip to the used pages and
+ // move them back.
+ while (currentPage < idLimit) {
+ // Find the next used page
+ while (currentPage < idLimit && pages[currentPage].index < 0) {
+ ++currentPage;
+ }
+
+ if (currentPage >= idLimit) {
+ break;
+ }
+
+ // Found an entry, move it.
+ qint32 affectedIndex = pages[currentPage].index;
+ if (Q_UNLIKELY(affectedIndex < 0 ||
+ affectedIndex >= idLimit ||
+ indexTable()[affectedIndex].firstPage != currentPage)) {
+ throw KSDCCorrupted();
+ }
+
+ indexTable()[affectedIndex].firstPage = freeSpot;
+
+ // Moving one page at a time guarantees we can use memcpy safely
+ // (in other words, the source and destination will not overlap).
+ while (currentPage < idLimit && pages[currentPage].index >= 0) {
+ const void *const sourcePage = page(currentPage);
+ void *const destinationPage = page(freeSpot);
+
+ // We always move used pages into previously-found empty spots,
+ // so check ordering as well for logic errors.
+ if (Q_UNLIKELY(!sourcePage || !destinationPage ||
+ sourcePage < destinationPage)) {
+ throw KSDCCorrupted();
+ }
+
+ ::memcpy(destinationPage, sourcePage, cachePageSize());
+ pages[freeSpot].index = affectedIndex;
+ pages[currentPage].index = -1;
+ ++currentPage;
+ ++freeSpot;
+
+ // If we've just moved the very last page and it happened to
+ // be at the very end of the cache then we're done.
+ if (currentPage >= idLimit) {
+ break;
+ }
+
+ // We're moving consecutive used pages whether they belong to
+ // our affected entry or not, so detect if we've started moving
+ // the data for a different entry and adjust if necessary.
+ if (affectedIndex != pages[currentPage].index) {
+ indexTable()[pages[currentPage].index].firstPage = freeSpot;
+ }
+ affectedIndex = pages[currentPage].index;
+ }
+
+ // At this point currentPage is on a page that is unused, and the
+ // cycle repeats. However, currentPage is not the first unused
+ // page, freeSpot is, so leave it alone.
+ }
+ }
+
+ /**
+ * Finds the index entry for a given key.
+ * @param key UTF-8 encoded key to search for.
+ * @return The index of the entry in the cache named by @p key. Returns
+ * <0 if no such entry is present.
+ */
+ qint32 findNamedEntry(const QByteArray &key) const
+ {
+ uint keyHash = generateHash(key);
+ uint position = keyHash % indexTableSize();
+ uint probeNumber = 1; // See insert() for description
+
+ // Imagine 3 entries A, B, C in this logical probing chain. If B is
+ // later removed then we can't find C either. So, we must keep
+ // searching for probeNumber number of tries (or we find the item,
+ // obviously).
+ while (indexTable()[position].fileNameHash != keyHash &&
+ probeNumber < MAX_PROBE_COUNT) {
+ position = (keyHash + (probeNumber + probeNumber * probeNumber) / 2)
+ % indexTableSize();
+ probeNumber++;
+ }
+
+ if (indexTable()[position].fileNameHash == keyHash) {
+ pageID firstPage = indexTable()[position].firstPage;
+ if (firstPage < 0 || static_cast<uint>(firstPage) >= pageTableSize()) {
+ return -1;
+ }
+
+ const void *resultPage = page(firstPage);
+ if (Q_UNLIKELY(!resultPage)) {
+ throw KSDCCorrupted();
+ }
+
+ const char *utf8FileName = reinterpret_cast<const char *>(resultPage);
+ if (qstrncmp(utf8FileName, key.constData(), cachePageSize()) == 0) {
+ return position;
+ }
+ }
+
+ return -1; // Not found, or a different one found.
+ }
+
+ // Function to use with QSharedPointer in removeUsedPages below...
+ static void deleteTable(IndexTableEntry *table)
+ {
+ delete [] table;
+ }
+
+ /**
+ * Removes the requested number of pages.
+ *
+ * @param numberNeeded the number of pages required to fulfill a current request.
+ * This number should be <0 and <= the number of pages in the cache.
+ * @return The identifier of the beginning of a consecutive block of pages able
+ * to fill the request. Returns a value >= pageTableSize() if no such
+ * request can be filled.
+ * @internal
+ */
+ uint removeUsedPages(uint numberNeeded)
+ {
+ if (numberNeeded == 0) {
+ qCritical() << "Internal error: Asked to remove exactly 0 pages for some reason.";
+ throw KSDCCorrupted();
+ }
+
+ if (numberNeeded > pageTableSize()) {
+ qCritical() << "Internal error: Requested more space than exists in the cache.";
+ qCritical() << numberNeeded << "requested, " << pageTableSize() << "is the total possible.";
+ throw KSDCCorrupted();
+ }
+
+ // If the cache free space is large enough we will defragment first
+ // instead since it's likely we're highly fragmented.
+ // Otherwise, we will (eventually) simply remove entries per the
+ // eviction order set for the cache until there is enough room
+ // available to hold the number of pages we need.
+
+ qCDebug(KCOREADDONS_DEBUG) << "Removing old entries to free up" << numberNeeded << "pages,"
+ << cacheAvail << "are already theoretically available.";
+
+ if (cacheAvail > 3 * numberNeeded) {
+ defragment();
+ uint result = findEmptyPages(numberNeeded);
+
+ if (result < pageTableSize()) {
+ return result;
+ } else {
+ qCritical() << "Just defragmented a locked cache, but still there"
+ << "isn't enough room for the current request.";
+ }
+ }
+
+ // At this point we know we'll have to free some space up, so sort our
+ // list of entries by whatever the current criteria are and start
+ // killing expired entries.
+ QSharedPointer<IndexTableEntry> tablePtr(new IndexTableEntry[indexTableSize()], deleteTable);
+
+ if (!tablePtr) {
+ qCritical() << "Unable to allocate temporary memory for sorting the cache!";
+ clearInternalTables();
+ throw KSDCCorrupted();
+ }
+
+ // We use tablePtr to ensure the data is destroyed, but do the access
+ // via a helper pointer to allow for array ops.
+ IndexTableEntry *table = tablePtr.data();
+
+ ::memcpy(table, indexTable(), sizeof(IndexTableEntry) * indexTableSize());
+
+ // Our entry ID is simply its index into the
+ // index table, which qSort will rearrange all willy-nilly, so first
+ // we'll save the *real* entry ID into firstPage (which is useless in
+ // our copy of the index table). On the other hand if the entry is not
+ // used then we note that with -1.
+ for (uint i = 0; i < indexTableSize(); ++i) {
+ table[i].firstPage = table[i].useCount > 0 ? static_cast<pageID>(i)
+ : -1;
+ }
+
+ // Declare the comparison function that we'll use to pass to qSort,
+ // based on our cache eviction policy.
+ bool (*compareFunction)(const IndexTableEntry &, const IndexTableEntry &);
+ switch (evictionPolicy.load()) {
+ case KSharedDataCache::EvictLeastOftenUsed:
+ case KSharedDataCache::NoEvictionPreference:
+ default:
+ compareFunction = seldomUsedCompare;
+ break;
+
+ case KSharedDataCache::EvictLeastRecentlyUsed:
+ compareFunction = lruCompare;
+ break;
+
+ case KSharedDataCache::EvictOldest:
+ compareFunction = ageCompare;
+ break;
+ }
+
+ qSort(table, table + indexTableSize(), compareFunction);
+
+ // Least recently used entries will be in the front.
+ // Start killing until we have room.
+
+ // Note on removeEntry: It expects an index into the index table,
+ // but our sorted list is all jumbled. But we stored the real index
+ // in the firstPage member.
+ // Remove entries until we've removed at least the required number
+ // of pages.
+ uint i = 0;
+ while (i < indexTableSize() && numberNeeded > cacheAvail) {
+ int curIndex = table[i++].firstPage; // Really an index, not a page
+
+ // Removed everything, still no luck (or curIndex is set but too high).
+ if (curIndex < 0 || static_cast<uint>(curIndex) >= indexTableSize()) {
+ qCritical() << "Trying to remove index" << curIndex
+ << "out-of-bounds for index table of size" << indexTableSize();
+ throw KSDCCorrupted();
+ }
+
+ qCDebug(KCOREADDONS_DEBUG) << "Removing entry of" << indexTable()[curIndex].totalItemSize
+ << "size";
+ removeEntry(curIndex);
+ }
+
+ // At this point let's see if we have freed up enough data by
+ // defragmenting first and seeing if we can find that free space.
+ defragment();
+
+ pageID result = pageTableSize();
+ while (i < indexTableSize() &&
+ (static_cast<uint>(result = findEmptyPages(numberNeeded))) >= pageTableSize()) {
+ int curIndex = table[i++].firstPage;
+
+ if (curIndex < 0) {
+ // One last shot.
+ defragment();
+ return findEmptyPages(numberNeeded);
+ }
+
+ if (Q_UNLIKELY(static_cast<uint>(curIndex) >= indexTableSize())) {
+ throw KSDCCorrupted();
+ }
+
+ removeEntry(curIndex);
+ }
+
+ // Whew.
+ return result;
+ }
+
+ // Returns the total size required for a given cache size.
+ static uint totalSize(uint cacheSize, uint effectivePageSize)
+ {
+ uint numberPages = intCeil(cacheSize, effectivePageSize);
+ uint indexTableSize = numberPages / 2;
+
+ // Knowing the number of pages, we can determine what addresses we'd be
+ // using (properly aligned), and from there determine how much memory
+ // we'd use.
+ IndexTableEntry *indexTableStart =
+ offsetAs<IndexTableEntry>(static_cast<void *>(nullptr), sizeof(SharedMemory));
+
+ indexTableStart += indexTableSize;
+
+ PageTableEntry *pageTableStart = reinterpret_cast<PageTableEntry *>(indexTableStart);
+ pageTableStart = alignTo<PageTableEntry>(pageTableStart);
+ pageTableStart += numberPages;
+
+ // The weird part, we must manually adjust the pointer based on the page size.
+ char *cacheStart = reinterpret_cast<char *>(pageTableStart);
+ cacheStart += (numberPages * effectivePageSize);
+
+ // ALIGNOF gives pointer alignment
+ cacheStart = alignTo<char>(cacheStart, ALIGNOF(void *));
+
+ // We've traversed the header, index, page table, and cache.
+ // Wherever we're at now is the size of the enchilada.
+ return static_cast<uint>(reinterpret_cast<quintptr>(cacheStart));
+ }
+
+ uint fileNameHash(const QByteArray &utf8FileName) const
+ {
+ return generateHash(utf8FileName) % indexTableSize();
+ }
+
+ void clear()
+ {
+ clearInternalTables();
+ }
+
+ void removeEntry(uint index);
+};
+
+// The per-instance private data, such as map size, whether
+// attached or not, pointer to shared memory, etc.
+class Q_DECL_HIDDEN KSharedDataCache::Private
+{
+public:
+ Private(const QString &name,
+ unsigned defaultCacheSize,
+ unsigned expectedItemSize
+ )
+ : m_cacheName(name)
+ , shm(nullptr)
+ , m_lock()
+ , m_mapSize(0)
+ , m_defaultCacheSize(defaultCacheSize)
+ , m_expectedItemSize(expectedItemSize)
+ , m_expectedType(LOCKTYPE_INVALID)
+ {
+ mapSharedMemory();
+ }
+
+ // Put the cache in a condition to be able to call mapSharedMemory() by
+ // completely detaching from shared memory (such as to respond to an
+ // unrecoverable error).
+ // m_mapSize must already be set to the amount of memory mapped to shm.
+ void detachFromSharedMemory()
+ {
+ // The lock holds a reference into shared memory, so this must be
+ // cleared before shm is removed.
+ m_lock.clear();
+
+ if (shm && 0 != ::munmap(shm, m_mapSize)) {
+ qCritical() << "Unable to unmap shared memory segment"
+ << static_cast<void *>(shm) << ":" << ::strerror(errno);
+ }
+
+ shm = nullptr;
+ m_mapSize = 0;
+ }
+
+ // This function does a lot of the important work, attempting to connect to shared
+ // memory, a private anonymous mapping if that fails, and failing that, nothing (but
+ // the cache remains "valid", we just don't actually do anything).
+ void mapSharedMemory()
+ {
+ // 0-sized caches are fairly useless.
+ unsigned cacheSize = qMax(m_defaultCacheSize, uint(SharedMemory::MINIMUM_CACHE_SIZE));
+ unsigned pageSize = SharedMemory::equivalentPageSize(m_expectedItemSize);
+
+ // Ensure that the cache is sized such that there is a minimum number of
+ // pages available. (i.e. a cache consisting of only 1 page is fairly
+ // useless and probably crash-prone).
+ cacheSize = qMax(pageSize * 256, cacheSize);
+
+ // The m_cacheName is used to find the file to store the cache in.
+ const QString cacheDir = QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation);
+ QString cacheName = cacheDir + QLatin1String("/") + m_cacheName + QLatin1String(".kcache");
+ QFile file(cacheName);
+ QFileInfo fileInfo(file);
+ if (!QDir().mkpath(fileInfo.absolutePath())) {
+ return;
+ }
+
+ // The basic idea is to open the file that we want to map into shared
+ // memory, and then actually establish the mapping. Once we have mapped the
+ // file into shared memory we can close the file handle, the mapping will
+ // still be maintained (unless the file is resized to be shorter than
+ // expected, which we don't handle yet :-( )
+
+ // size accounts for the overhead over the desired cacheSize
+ uint size = SharedMemory::totalSize(cacheSize, pageSize);
+ void *mapAddress = MAP_FAILED;
+
+ if (size < cacheSize) {
+ qCritical() << "Asked for a cache size less than requested size somehow -- Logic Error :(";
+ return;
+ }
+
+ // We establish the shared memory mapping here, only if we will have appropriate
+ // mutex support (systemSupportsProcessSharing), then we:
+ // Open the file and resize to some sane value if the file is too small.
+ if (file.open(QIODevice::ReadWrite) &&
+ (file.size() >= size ||
+ (file.resize(size) && ensureFileAllocated(file.handle(), size)))) {
+ // Use mmap directly instead of QFile::map since the QFile (and its
+ // shared mapping) will disappear unless we hang onto the QFile for no
+ // reason (see the note below, we don't care about the file per se...)
+ mapAddress = QT_MMAP(nullptr, size, PROT_READ | PROT_WRITE, MAP_SHARED, file.handle(), 0);
+
+ // So... it is possible that someone else has mapped this cache already
+ // with a larger size. If that's the case we need to at least match
+ // the size to be able to access every entry, so fixup the mapping.
+ if (mapAddress != MAP_FAILED) {
+ SharedMemory *mapped = reinterpret_cast<SharedMemory *>(mapAddress);
+
+ // First make sure that the version of the cache on disk is
+ // valid. We also need to check that version != 0 to
+ // disambiguate against an uninitialized cache.
+ if (mapped->version != SharedMemory::PIXMAP_CACHE_VERSION &&
+ mapped->version > 0) {
+ qCWarning(KCOREADDONS_DEBUG) << "Deleting wrong version of cache" << cacheName;
+
+ // CAUTION: Potentially recursive since the recovery
+ // involves calling this function again.
+ m_mapSize = size;
+ shm = mapped;
+ recoverCorruptedCache();
+ return;
+ } else if (mapped->cacheSize > cacheSize) {
+ // This order is very important. We must save the cache size
+ // before we remove the mapping, but unmap before overwriting
+ // the previous mapping size...
+ cacheSize = mapped->cacheSize;
+ unsigned actualPageSize = mapped->cachePageSize();
+ ::munmap(mapAddress, size);
+ size = SharedMemory::totalSize(cacheSize, actualPageSize);
+ mapAddress = QT_MMAP(nullptr, size, PROT_READ | PROT_WRITE, MAP_SHARED, file.handle(), 0);
+ }
+ }
+ }
+
+ // We could be here without the mapping established if:
+ // 1) Process-shared synchronization is not supported, either at compile or run time,
+ // 2) Unable to open the required file.
+ // 3) Unable to resize the file to be large enough.
+ // 4) Establishing the mapping failed.
+ // 5) The mapping succeeded, but the size was wrong and we were unable to map when
+ // we tried again.
+ // 6) The incorrect version of the cache was detected.
+ // 7) The file could be created, but posix_fallocate failed to commit it fully to disk.
+ // In any of these cases, attempt to fallback to the
+ // better-supported anonymous private page style of mmap. This memory won't
+ // be shared, but our code will still work the same.
+ // NOTE: We never use the on-disk representation independently of the
+ // shared memory. If we don't get shared memory the disk info is ignored,
+ // if we do get shared memory we never look at disk again.
+ if (mapAddress == MAP_FAILED) {
+ qCWarning(KCOREADDONS_DEBUG) << "Failed to establish shared memory mapping, will fallback"
+ << "to private memory -- memory usage will increase";
+
+ mapAddress = QT_MMAP(nullptr, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+ }
+
+ // Well now we're really hosed. We can still work, but we can't even cache
+ // data.
+ if (mapAddress == MAP_FAILED) {
+ qCritical() << "Unable to allocate shared memory segment for shared data cache"
+ << cacheName << "of size" << cacheSize;
+ return;
+ }
+
+ m_mapSize = size;
+
+ // We never actually construct shm, but we assign it the same address as the
+ // shared memory we just mapped, so effectively shm is now a SharedMemory that
+ // happens to be located at mapAddress.
+ shm = reinterpret_cast<SharedMemory *>(mapAddress);
+
+ // If we were first to create this memory map, all data will be 0.
+ // Therefore if ready == 0 we're not initialized. A fully initialized
+ // header will have ready == 2. Why?
+ // Because 0 means "safe to initialize"
+ // 1 means "in progress of initing"
+ // 2 means "ready"
+ uint usecSleepTime = 8; // Start by sleeping for 8 microseconds
+ while (shm->ready.load() != 2) {
+ if (Q_UNLIKELY(usecSleepTime >= (1 << 21))) {
+ // Didn't acquire within ~8 seconds? Assume an issue exists
+ qCritical() << "Unable to acquire shared lock, is the cache corrupt?";
+
+ file.remove(); // Unlink the cache in case it's corrupt.
+ detachFromSharedMemory();
+ return; // Fallback to QCache (later)
+ }
+
+ if (shm->ready.testAndSetAcquire(0, 1)) {
+ if (!shm->performInitialSetup(cacheSize, pageSize)) {
+ qCritical() << "Unable to perform initial setup, this system probably "
+ "does not really support process-shared pthreads or "
+ "semaphores, even though it claims otherwise.";
+
+ file.remove();
+ detachFromSharedMemory();
+ return;
+ }
+ } else {
+ usleep(usecSleepTime); // spin
+
+ // Exponential fallback as in Ethernet and similar collision resolution methods
+ usecSleepTime *= 2;
+ }
+ }
+
+ m_expectedType = shm->shmLock.type;
+ m_lock = QSharedPointer<KSDCLock>(createLockFromId(m_expectedType, shm->shmLock));
+ bool isProcessSharingSupported = false;
+
+ if (!m_lock->initialize(isProcessSharingSupported)) {
+ qCritical() << "Unable to setup shared cache lock, although it worked when created.";
+ detachFromSharedMemory();
+ }
+ }
+
+ // Called whenever the cache is apparently corrupt (for instance, a timeout trying to
+ // lock the cache). In this situation it is safer just to destroy it all and try again.
+ void recoverCorruptedCache()
+ {
+ KSharedDataCache::deleteCache(m_cacheName);
+
+ detachFromSharedMemory();
+
+ // Do this even if we weren't previously cached -- it might work now.
+ mapSharedMemory();
+ }
+
+ // This should be called for any memory access to shared memory. This
+ // function will verify that the bytes [base, base+accessLength) are
+ // actually mapped to d->shm. The cache itself may have incorrect cache
+ // page sizes, incorrect cache size, etc. so this function should be called
+ // despite the cache data indicating it should be safe.
+ //
+ // If the access is /not/ safe then a KSDCCorrupted exception will be
+ // thrown, so be ready to catch that.
+ void verifyProposedMemoryAccess(const void *base, unsigned accessLength) const
+ {
+ quintptr startOfAccess = reinterpret_cast<quintptr>(base);
+ quintptr startOfShm = reinterpret_cast<quintptr>(shm);
+
+ if (Q_UNLIKELY(startOfAccess < startOfShm)) {
+ throw KSDCCorrupted();
+ }
+
+ quintptr endOfShm = startOfShm + m_mapSize;
+ quintptr endOfAccess = startOfAccess + accessLength;
+
+ // Check for unsigned integer wraparound, and then
+ // bounds access
+ if (Q_UNLIKELY((endOfShm < startOfShm) ||
+ (endOfAccess < startOfAccess) ||
+ (endOfAccess > endOfShm))) {
+ throw KSDCCorrupted();
+ }
+ }
+
+ bool lock() const
+ {
+ if (Q_LIKELY(shm && shm->shmLock.type == m_expectedType)) {
+ return m_lock->lock();
+ }
+
+ // No shm or wrong type --> corrupt!
+ throw KSDCCorrupted();
+ }
+
+ void unlock() const
+ {
+ m_lock->unlock();
+ }
+
+ class CacheLocker
+ {
+ mutable Private *d;
+
+ bool cautiousLock()
+ {
+ int lockCount = 0;
+
+ // Locking can fail due to a timeout. If it happens too often even though
+ // we're taking corrective action assume there's some disastrous problem
+ // and give up.
+ while (!d->lock() && !isLockedCacheSafe()) {
+ d->recoverCorruptedCache();
+
+ if (!d->shm) {
+ qCWarning(KCOREADDONS_DEBUG) << "Lost the connection to shared memory for cache"
+ << d->m_cacheName;
+ return false;
+ }
+
+ if (lockCount++ > 4) {
+ qCritical() << "There is a very serious problem with the KDE data cache"
+ << d->m_cacheName << "giving up trying to access cache.";
+ d->detachFromSharedMemory();
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ // Runs a quick battery of tests on an already-locked cache and returns
+ // false as soon as a sanity check fails. The cache remains locked in this
+ // situation.
+ bool isLockedCacheSafe() const
+ {
+ // Note that cachePageSize() itself runs a check that can throw.
+ uint testSize = SharedMemory::totalSize(d->shm->cacheSize, d->shm->cachePageSize());
+
+ if (Q_UNLIKELY(d->m_mapSize != testSize)) {
+ return false;
+ }
+ if (Q_UNLIKELY(d->shm->version != SharedMemory::PIXMAP_CACHE_VERSION)) {
+ return false;
+ }
+ switch (d->shm->evictionPolicy.load()) {
+ case NoEvictionPreference: // fallthrough
+ case EvictLeastRecentlyUsed: // fallthrough
+ case EvictLeastOftenUsed: // fallthrough
+ case EvictOldest:
+ break;
+ default:
+ return false;
+ }
+
+ return true;
+ }
+
+ public:
+ CacheLocker(const Private *_d) : d(const_cast<Private *>(_d))
+ {
+ if (Q_UNLIKELY(!d || !d->shm || !cautiousLock())) {
+ d = nullptr;
+ }
+ }
+
+ ~CacheLocker()
+ {
+ if (d && d->shm) {
+ d->unlock();
+ }
+ }
+
+ bool failed() const
+ {
+ return !d || d->shm == nullptr;
+ }
+ };
+
+ QString m_cacheName;
+ SharedMemory *shm;
+ QSharedPointer<KSDCLock> m_lock;
+ uint m_mapSize;
+ uint m_defaultCacheSize;
+ uint m_expectedItemSize;
+ SharedLockId m_expectedType;
+};
+
+// Must be called while the lock is already held!
+void SharedMemory::removeEntry(uint index)
+{
+ if (index >= indexTableSize() || cacheAvail > pageTableSize()) {
+ throw KSDCCorrupted();
+ }
+
+ PageTableEntry *pageTableEntries = pageTable();
+ IndexTableEntry *entriesIndex = indexTable();
+
+ // Update page table first
+ pageID firstPage = entriesIndex[index].firstPage;
+ if (firstPage < 0 || static_cast<quint32>(firstPage) >= pageTableSize()) {
+ qCDebug(KCOREADDONS_DEBUG) << "Trying to remove an entry which is already invalid. This "
+ << "cache is likely corrupt.";
+ throw KSDCCorrupted();
+ }
+
+ if (index != static_cast<uint>(pageTableEntries[firstPage].index)) {
+ qCritical() << "Removing entry" << index << "but the matching data"
+ << "doesn't link back -- cache is corrupt, clearing.";
+ throw KSDCCorrupted();
+ }
+
+ uint entriesToRemove = intCeil(entriesIndex[index].totalItemSize, cachePageSize());
+ uint savedCacheSize = cacheAvail;
+ for (uint i = firstPage; i < pageTableSize() &&
+ static_cast<uint>(pageTableEntries[i].index) == index; ++i) {
+ pageTableEntries[i].index = -1;
+ cacheAvail++;
+ }
+
+ if ((cacheAvail - savedCacheSize) != entriesToRemove) {
+ qCritical() << "We somehow did not remove" << entriesToRemove
+ << "when removing entry" << index << ", instead we removed"
+ << (cacheAvail - savedCacheSize);
+ throw KSDCCorrupted();
+ }
+
+ // For debugging
+#ifdef NDEBUG
+ void *const startOfData = page(firstPage);
+ if (startOfData) {
+ QByteArray str((const char *) startOfData);
+ str.prepend(" REMOVED: ");
+ str.prepend(QByteArray::number(index));
+ str.prepend("ENTRY ");
+
+ ::memcpy(startOfData, str.constData(), str.size() + 1);
+ }
+#endif
+
+ // Update the index
+ entriesIndex[index].fileNameHash = 0;
+ entriesIndex[index].totalItemSize = 0;
+ entriesIndex[index].useCount = 0;
+ entriesIndex[index].lastUsedTime = 0;
+ entriesIndex[index].addTime = 0;
+ entriesIndex[index].firstPage = -1;
+}
+
+KSharedDataCache::KSharedDataCache(const QString &cacheName,
+ unsigned defaultCacheSize,
+ unsigned expectedItemSize)
+ : d(nullptr)
+{
+ try {
+ d = new Private(cacheName, defaultCacheSize, expectedItemSize);
+ } catch (KSDCCorrupted) {
+ KSharedDataCache::deleteCache(cacheName);
+
+ // Try only once more
+ try {
+ d = new Private(cacheName, defaultCacheSize, expectedItemSize);
+ } catch (KSDCCorrupted) {
+ qCritical()
+ << "Even a brand-new cache starts off corrupted, something is"
+ << "seriously wrong. :-(";
+ d = nullptr; // Just in case
+ }
+ }
+}
+
+KSharedDataCache::~KSharedDataCache()
+{
+ // Note that there is no other actions required to separate from the
+ // shared memory segment, simply unmapping is enough. This makes things
+ // *much* easier so I'd recommend maintaining this ideal.
+ if (!d) {
+ return;
+ }
+
+ if (d->shm) {
+#ifdef KSDC_MSYNC_SUPPORTED
+ ::msync(d->shm, d->m_mapSize, MS_INVALIDATE | MS_ASYNC);
+#endif
+ ::munmap(d->shm, d->m_mapSize);
+ }
+
+ // Do not delete d->shm, it was never constructed, it's just an alias.
+ d->shm = nullptr;
+
+ delete d;
+}
+
+bool KSharedDataCache::insert(const QString &key, const QByteArray &data)
+{
+ try {
+ Private::CacheLocker lock(d);
+ if (lock.failed()) {
+ return false;
+ }
+
+ QByteArray encodedKey = key.toUtf8();
+ uint keyHash = generateHash(encodedKey);
+ uint position = keyHash % d->shm->indexTableSize();
+
+ // See if we're overwriting an existing entry.
+ IndexTableEntry *indices = d->shm->indexTable();
+
+ // In order to avoid the issue of a very long-lived cache having items
+ // with a use count of 1 near-permanently, we attempt to artifically
+ // reduce the use count of long-lived items when there is high load on
+ // the cache. We do this randomly, with a weighting that makes the event
+ // impossible if load < 0.5, and guaranteed if load >= 0.96.
+ const static double startCullPoint = 0.5l;
+ const static double mustCullPoint = 0.96l;
+
+ // cacheAvail is in pages, cacheSize is in bytes.
+ double loadFactor = 1.0 - (1.0l * d->shm->cacheAvail * d->shm->cachePageSize()
+ / d->shm->cacheSize);
+ bool cullCollisions = false;
+
+ if (Q_UNLIKELY(loadFactor >= mustCullPoint)) {
+ cullCollisions = true;
+ } else if (loadFactor > startCullPoint) {
+ const int tripWireValue = RAND_MAX * (loadFactor - startCullPoint) / (mustCullPoint - startCullPoint);
+ if (KRandom::random() >= tripWireValue) {
+ cullCollisions = true;
+ }
+ }
+
+ // In case of collisions in the index table (i.e. identical positions), use
+ // quadratic chaining to attempt to find an empty slot. The equation we use
+ // is:
+ // position = (hash + (i + i*i) / 2) % size, where i is the probe number.
+ uint probeNumber = 1;
+ while (indices[position].useCount > 0 && probeNumber < MAX_PROBE_COUNT) {
+ // If we actually stumbled upon an old version of the key we are
+ // overwriting, then use that position, do not skip over it.
+
+ if (Q_UNLIKELY(indices[position].fileNameHash == keyHash)) {
+ break;
+ }
+
+ // If we are "culling" old entries, see if this one is old and if so
+ // reduce its use count. If it reduces to zero then eliminate it and
+ // use its old spot.
+
+ if (cullCollisions && (::time(nullptr) - indices[position].lastUsedTime) > 60) {
+ indices[position].useCount >>= 1;
+ if (indices[position].useCount == 0) {
+ qCDebug(KCOREADDONS_DEBUG) << "Overwriting existing old cached entry due to collision.";
+ d->shm->removeEntry(position); // Remove it first
+ break;
+ }
+ }
+
+ position = (keyHash + (probeNumber + probeNumber * probeNumber) / 2)
+ % d->shm->indexTableSize();
+ probeNumber++;
+ }
+
+ if (indices[position].useCount > 0 && indices[position].firstPage >= 0) {
+ //qCDebug(KCOREADDONS_DEBUG) << "Overwriting existing cached entry due to collision.";
+ d->shm->removeEntry(position); // Remove it first
+ }
+
+ // Data will be stored as fileNamefoo\0PNGimagedata.....
+ // So total size required is the length of the encoded file name + 1
+ // for the trailing null, and then the length of the image data.
+ uint fileNameLength = 1 + encodedKey.length();
+ uint requiredSize = fileNameLength + data.size();
+ uint pagesNeeded = intCeil(requiredSize, d->shm->cachePageSize());
+ uint firstPage(-1);
+
+ if (pagesNeeded >= d->shm->pageTableSize()) {
+ qCWarning(KCOREADDONS_DEBUG) << key << "is too large to be cached.";
+ return false;
+ }
+
+ // If the cache has no room, or the fragmentation is too great to find
+ // the required number of consecutive free pages, take action.
+ if (pagesNeeded > d->shm->cacheAvail ||
+ (firstPage = d->shm->findEmptyPages(pagesNeeded)) >= d->shm->pageTableSize()) {
+ // If we have enough free space just defragment
+ uint freePagesDesired = 3 * qMax(1u, pagesNeeded / 2);
+
+ if (d->shm->cacheAvail > freePagesDesired) {
+ // TODO: How the hell long does this actually take on real
+ // caches?
+ d->shm->defragment();
+ firstPage = d->shm->findEmptyPages(pagesNeeded);
+ } else {
+ // If we already have free pages we don't want to remove a ton
+ // extra. However we can't rely on the return value of
+ // removeUsedPages giving us a good location since we're not
+ // passing in the actual number of pages that we need.
+ d->shm->removeUsedPages(qMin(2 * freePagesDesired, d->shm->pageTableSize())
+ - d->shm->cacheAvail);
+ firstPage = d->shm->findEmptyPages(pagesNeeded);
+ }
+
+ if (firstPage >= d->shm->pageTableSize() ||
+ d->shm->cacheAvail < pagesNeeded) {
+ qCritical() << "Unable to free up memory for" << key;
+ return false;
+ }
+ }
+
+ // Update page table
+ PageTableEntry *table = d->shm->pageTable();
+ for (uint i = 0; i < pagesNeeded; ++i) {
+ table[firstPage + i].index = position;
+ }
+
+ // Update index
+ indices[position].fileNameHash = keyHash;
+ indices[position].totalItemSize = requiredSize;
+ indices[position].useCount = 1;
+ indices[position].addTime = ::time(nullptr);
+ indices[position].lastUsedTime = indices[position].addTime;
+ indices[position].firstPage = firstPage;
+
+ // Update cache
+ d->shm->cacheAvail -= pagesNeeded;
+
+ // Actually move the data in place
+ void *dataPage = d->shm->page(firstPage);
+ if (Q_UNLIKELY(!dataPage)) {
+ throw KSDCCorrupted();
+ }
+
+ // Verify it will all fit
+ d->verifyProposedMemoryAccess(dataPage, requiredSize);
+
+ // Cast for byte-sized pointer arithmetic
+ uchar *startOfPageData = reinterpret_cast<uchar *>(dataPage);
+ ::memcpy(startOfPageData, encodedKey.constData(), fileNameLength);
+ ::memcpy(startOfPageData + fileNameLength, data.constData(), data.size());
+
+ return true;
+ } catch (KSDCCorrupted) {
+ d->recoverCorruptedCache();
+ return false;
+ }
+}
+
+bool KSharedDataCache::find(const QString &key, QByteArray *destination) const
+{
+ try {
+ Private::CacheLocker lock(d);
+ if (lock.failed()) {
+ return false;
+ }
+
+ // Search in the index for our data, hashed by key;
+ QByteArray encodedKey = key.toUtf8();
+ qint32 entry = d->shm->findNamedEntry(encodedKey);
+
+ if (entry >= 0) {
+ const IndexTableEntry *header = &d->shm->indexTable()[entry];
+ const void *resultPage = d->shm->page(header->firstPage);
+ if (Q_UNLIKELY(!resultPage)) {
+ throw KSDCCorrupted();
+ }
+
+ d->verifyProposedMemoryAccess(resultPage, header->totalItemSize);
+
+ header->useCount++;
+ header->lastUsedTime = ::time(nullptr);
+
+ // Our item is the key followed immediately by the data, so skip
+ // past the key.
+ const char *cacheData = reinterpret_cast<const char *>(resultPage);
+ cacheData += encodedKey.size();
+ cacheData++; // Skip trailing null -- now we're pointing to start of data
+
+ if (destination) {
+ *destination = QByteArray(cacheData, header->totalItemSize - encodedKey.size() - 1);
+ }
+
+ return true;
+ }
+ } catch (KSDCCorrupted) {
+ d->recoverCorruptedCache();
+ }
+
+ return false;
+}
+
+void KSharedDataCache::clear()
+{
+ try {
+ Private::CacheLocker lock(d);
+
+ if (!lock.failed()) {
+ d->shm->clear();
+ }
+ } catch (KSDCCorrupted) {
+ d->recoverCorruptedCache();
+ }
+}
+
+bool KSharedDataCache::contains(const QString &key) const
+{
+ try {
+ Private::CacheLocker lock(d);
+ if (lock.failed()) {
+ return false;
+ }
+
+ return d->shm->findNamedEntry(key.toUtf8()) >= 0;
+ } catch (KSDCCorrupted) {
+ d->recoverCorruptedCache();
+ return false;
+ }
+}
+
+void KSharedDataCache::deleteCache(const QString &cacheName)
+{
+ QString cachePath = QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation) + QLatin1String("/") + cacheName + QLatin1String(".kcache");
+
+ // Note that it is important to simply unlink the file, and not truncate it
+ // smaller first to avoid SIGBUS errors and similar with shared memory
+ // attached to the underlying inode.
+ qCDebug(KCOREADDONS_DEBUG) << "Removing cache at" << cachePath;
+ QFile::remove(cachePath);
+}
+
+unsigned KSharedDataCache::totalSize() const
+{
+ try {
+ Private::CacheLocker lock(d);
+ if (lock.failed()) {
+ return 0u;
+ }
+
+ return d->shm->cacheSize;
+ } catch (KSDCCorrupted) {
+ d->recoverCorruptedCache();
+ return 0u;
+ }
+}
+
+unsigned KSharedDataCache::freeSize() const
+{
+ try {
+ Private::CacheLocker lock(d);
+ if (lock.failed()) {
+ return 0u;
+ }
+
+ return d->shm->cacheAvail * d->shm->cachePageSize();
+ } catch (KSDCCorrupted) {
+ d->recoverCorruptedCache();
+ return 0u;
+ }
+}
+
+KSharedDataCache::EvictionPolicy KSharedDataCache::evictionPolicy() const
+{
+ if (d && d->shm) {
+ return static_cast<EvictionPolicy>(d->shm->evictionPolicy.fetchAndAddAcquire(0));
+ }
+
+ return NoEvictionPreference;
+}
+
+void KSharedDataCache::setEvictionPolicy(EvictionPolicy newPolicy)
+{
+ if (d && d->shm) {
+ d->shm->evictionPolicy.fetchAndStoreRelease(static_cast<int>(newPolicy));
+ }
+}
+
+unsigned KSharedDataCache::timestamp() const
+{
+ if (d && d->shm) {
+ return static_cast<unsigned>(d->shm->cacheTimestamp.fetchAndAddAcquire(0));
+ }
+
+ return 0;
+}
+
+void KSharedDataCache::setTimestamp(unsigned newTimestamp)
+{
+ if (d && d->shm) {
+ d->shm->cacheTimestamp.fetchAndStoreRelease(static_cast<int>(newTimestamp));
+ }
+}
--- /dev/null
+/*
+ * This file is part of the KDE project.
+ * Copyright © 2010 Michael Pyne <mpyne@kde.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License version 2 as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef KSHAREDDATACACHE_H
+#define KSHAREDDATACACHE_H
+
+#include <kcoreaddons_export.h>
+
+class QString;
+class QByteArray;
+
+/**
+ * @class KSharedDataCache kshareddatacache.h KSharedDataCache
+ *
+ * @brief A simple data cache which uses shared memory to quickly access data
+ * stored on disk.
+ *
+ * This class is meant to be used with KImageCache and similar classes but can
+ * be used directly if used with care.
+ *
+ * Example usage:
+ *
+ * @code
+ * QString loadTranslatedDocument(KSharedDataCache *cache) {
+ *
+ * // Find the data
+ * QByteArray document;
+ *
+ * if (!cache->find("translated-doc-template", &document)) {
+ * // Entry is not cached, manually generate and then add to cache.
+ * document = translateDocument(globalTemplate());
+ * cache->insert(document);
+ * }
+ *
+ * // Don't forget to encode/decode properly
+ * return QString::fromUtf8(document);
+ * }
+ * @endcode
+ *
+ * @author Michael Pyne <mpyne@kde.org>
+ * @see KImageCache
+ * @since 4.5
+ */
+class KCOREADDONS_EXPORT KSharedDataCache
+{
+public:
+ /**
+ * Attaches to a shared cache, creating it if necessary. If supported, this
+ * data cache will be shared across all processes using this cache (with
+ * subsequent memory savings). If shared memory is unsupported or a
+ * failure occurs, caching will still be supported, but only in the same
+ * process, and only using the same KSharedDataCache object.
+ *
+ * @param cacheName Name of the cache to use/share.
+ * @param defaultCacheSize Amount of data to be able to store, in bytes. The
+ * actual size will be slightly larger on disk due to accounting
+ * overhead. If the cache already existed then it <em>will not</em> be
+ * resized. For this reason you should specify some reasonable size.
+ * @param expectedItemSize The average size of an item that would be stored
+ * in the cache, in bytes. Choosing an average size of zero bytes causes
+ * KSharedDataCache to use whatever it feels is the best default for the
+ * system.
+ */
+ KSharedDataCache(const QString &cacheName,
+ unsigned defaultCacheSize,
+ unsigned expectedItemSize = 0);
+ ~KSharedDataCache();
+
+ enum EvictionPolicy {
+ // The default value for data in our shared memory will be 0, so it is
+ // important that whatever we want for the default value is also 0.
+ NoEvictionPreference = 0,
+ EvictLeastRecentlyUsed,
+ EvictLeastOftenUsed,
+ EvictOldest
+ };
+
+ /**
+ * @return The removal policy in use by the shared cache.
+ * @see EvictionPolicy
+ */
+ EvictionPolicy evictionPolicy() const;
+
+ /**
+ * Sets the entry removal policy for the shared cache to
+ * @p newPolicy. The default is EvictionPolicy::NoEvictionPreference.
+ *
+ * @see EvictionPolicy
+ */
+ void setEvictionPolicy(EvictionPolicy newPolicy);
+
+ /**
+ * Attempts to insert the entry @p data into the shared cache, named by
+ * @p key, and returns true only if successful.
+ *
+ * Note that even if the insert was successful, that the newly added entry
+ * may be evicted by other processes contending for the cache.
+ */
+ bool insert(const QString &key, const QByteArray &data);
+
+ /**
+ * Returns the data in the cache named by @p key (even if it's some other
+ * process's data named with the same key!), stored in @p destination. If there is
+ * no entry named by @p key then @p destination is left unchanged. The return value
+ * is used to tell what happened.
+ *
+ * If you simply want to verify whether an entry is present in the cache then
+ * see contains().
+ *
+ * @param key The key to find in the cache.
+ * @param destination Is set to the value of @p key in the cache if @p key is
+ * present, left unchanged otherwise.
+ * @return true if @p key was present in the cache (@p destination will also be
+ * updated), false if @p key was not present (@p destination will be
+ * unchanged).
+ */
+ bool find(const QString &key, QByteArray *destination) const;
+
+ /**
+ * Removes all entries from the cache.
+ */
+ void clear();
+
+ /**
+ * Removes the underlying file from the cache. Note that this is *all* that this
+ * function does. The shared memory segment is still attached and will still contain
+ * all the data until all processes currently attached remove the mapping.
+ *
+ * In order to remove the data see clear().
+ */
+ static void deleteCache(const QString &cacheName);
+
+ /**
+ * Returns true if the cache currently contains the image for the given
+ * filename.
+ *
+ * NOTE: Calling this function is threadsafe, but it is in general not
+ * possible to guarantee the image stays cached immediately afterwards,
+ * so if you need the result use find().
+ */
+ bool contains(const QString &key) const;
+
+ /**
+ * Returns the usable cache size in bytes. The actual amount of memory
+ * used will be slightly larger than this to account for required
+ * accounting overhead.
+ */
+ unsigned totalSize() const;
+
+ /**
+ * Returns the amount of free space in the cache, in bytes. Due to
+ * implementation details it is possible to still not be able to fit an
+ * entry in the cache at any given time even if it is smaller than the
+ * amount of space remaining.
+ */
+ unsigned freeSize() const;
+
+ /**
+ * @return The shared timestamp of the cache. The interpretation of the
+ * timestamp returned is up to the application. KSharedDataCache
+ * will initialize the timestamp to the time returned by @c time(2)
+ * on cache creation, but KSharedDataCache will not touch the
+ * timestamp again.
+ * @see setTimestamp()
+ * @since 4.6
+ */
+ unsigned timestamp() const;
+
+ /**
+ * Sets the shared timestamp of the cache. Timestamping is supported to
+ * allow applications to more effectively "version" the data stored in the
+ * cache. However, the timestamp is shared with <em>all</em> applications
+ * using the cache so you should always be prepared for invalid
+ * timestamps.
+ *
+ * When the cache is first created (note that this is different from
+ * attaching to an existing shared cache on disk), the cache timestamp is
+ * initialized to the time returned by @c time(2). KSharedDataCache will
+ * not update the timestamp again, it is only updated through this method.
+ *
+ * Example:
+ * @code
+ * QImage loadCachedImage(const QString &key)
+ * {
+ * // Check timestamp
+ * if (m_sharedCache->timestamp() < m_currentThemeTimestamp) {
+ * // Cache is stale, clean it out.
+ * m_sharedCache->clear();
+ * m_sharedCache->setTimestamp(m_currentThemeTimestamp);
+ * }
+ *
+ * // Check cache and load image as usual...
+ * }
+ * @endcode
+ *
+ * @param newTimestamp The new timestamp to mark the shared cache with.
+ * @see timestamp()
+ * @since 4.6
+ */
+ void setTimestamp(unsigned newTimestamp);
+
+private:
+ class Private;
+ Private *d;
+};
+
+#endif
--- /dev/null
+/*
+ * This file is part of the KDE project.
+ * Copyright © 2010 Michael Pyne <mpyne@kde.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License version 2 as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef KSHAREDDATACACHE_P_H
+#define KSHAREDDATACACHE_P_H
+
+#include <config-caching.h> // HAVE_SYS_MMAN_H
+
+#include <QDebug>
+#include <QSharedPointer>
+#include <qbasicatomic.h>
+
+#include "kcoreaddons_debug.h"
+
+#include <unistd.h> // Check for sched_yield
+#include <sched.h> // sched_yield
+#include <errno.h>
+#include <fcntl.h>
+#include <time.h>
+
+// Mac OS X, for all its POSIX compliance, does not support timeouts on its
+// mutexes, which is kind of a disaster for cross-process support. However
+// synchronization primitives still work, they just might hang if the cache is
+// corrupted, so keep going.
+#if defined(_POSIX_TIMEOUTS) && ((_POSIX_TIMEOUTS == 0) || (_POSIX_TIMEOUTS >= 200112L))
+#define KSDC_TIMEOUTS_SUPPORTED 1
+#endif
+
+#if defined(__GNUC__) && !defined(KSDC_TIMEOUTS_SUPPORTED)
+#warning "No support for POSIX timeouts -- application hangs are possible if the cache is corrupt"
+#endif
+
+#if defined(_POSIX_THREAD_PROCESS_SHARED) && ((_POSIX_THREAD_PROCESS_SHARED == 0) || (_POSIX_THREAD_PROCESS_SHARED >= 200112L)) && !defined(__APPLE__)
+#include <pthread.h>
+#define KSDC_THREAD_PROCESS_SHARED_SUPPORTED 1
+#endif
+
+#if defined(_POSIX_SEMAPHORES) && ((_POSIX_SEMAPHORES == 0) || (_POSIX_SEMAPHORES >= 200112L))
+#include <semaphore.h>
+#define KSDC_SEMAPHORES_SUPPORTED 1
+#endif
+
+#if defined(__GNUC__) && !defined(KSDC_SEMAPHORES_SUPPORTED) && !defined(KSDC_THREAD_PROCESS_SHARED_SUPPORTED)
+#warning "No system support claimed for process-shared synchronization, KSharedDataCache will be mostly useless."
+#endif
+
+#if defined(_POSIX_MAPPED_FILES) && ((_POSIX_MAPPED_FILES == 0) || (_POSIX_MAPPED_FILES >= 200112L))
+#define KSDC_MAPPED_FILES_SUPPORTED 1
+#endif
+
+#if defined(_POSIX_SYNCHRONIZED_IO) && ((_POSIX_SYNCHRONIZED_IO == 0) || (_POSIX_SYNCHRONIZED_IO >= 200112L))
+#define KSDC_SYNCHRONIZED_IO_SUPPORTED 1
+#endif
+
+// msync(2) requires both MAPPED_FILES and SYNCHRONIZED_IO POSIX options
+#if defined(KSDC_MAPPED_FILES_SUPPORTED) && defined(KSDC_SYNCHRONIZED_IO_SUPPORTED)
+#define KSDC_MSYNC_SUPPORTED
+#endif
+
+// posix_fallocate is used to ensure that the file used for the cache is
+// actually fully committed to disk before attempting to use the file.
+#if defined(_POSIX_ADVISORY_INFO) && ((_POSIX_ADVISORY_INFO == 0) || (_POSIX_ADVISORY_INFO >= 200112L))
+#define KSDC_POSIX_FALLOCATE_SUPPORTED 1
+#endif
+#ifdef Q_OS_OSX
+#include "posix_fallocate_mac.h"
+#define KSDC_POSIX_FALLOCATE_SUPPORTED 1
+#endif
+
+// BSD/Mac OS X compat
+#if HAVE_SYS_MMAN_H
+#include <sys/mman.h>
+#endif
+#if !defined(MAP_ANONYMOUS) && defined(MAP_ANON)
+#define MAP_ANONYMOUS MAP_ANON
+#endif
+
+/**
+ * This class defines an interface used by KSharedDataCache::Private to offload
+ * proper locking and unlocking depending on what the platform supports at
+ * runtime and compile-time.
+ */
+class KSDCLock
+{
+public:
+ virtual ~KSDCLock()
+ {
+ }
+
+ // Return value indicates if the mutex was properly initialized (including
+ // threads-only as a fallback).
+ virtual bool initialize(bool &processSharingSupported)
+ {
+ processSharingSupported = false;
+ return false;
+ }
+
+ virtual bool lock()
+ {
+ return false;
+ }
+
+ virtual void unlock()
+ {
+ }
+};
+
+/**
+ * This is a very basic lock that should work on any system where GCC atomic
+ * intrinsics are supported. It can waste CPU so better primitives should be
+ * used if available on the system.
+ */
+class simpleSpinLock : public KSDCLock
+{
+public:
+ simpleSpinLock(QBasicAtomicInt &spinlock)
+ : m_spinlock(spinlock)
+ {
+ }
+
+ bool initialize(bool &processSharingSupported) override
+ {
+ // Clear the spinlock
+ m_spinlock.store(0);
+ processSharingSupported = true;
+ return true;
+ }
+
+ bool lock() override
+ {
+ // Spin a few times attempting to gain the lock, as upper-level code won't
+ // attempt again without assuming the cache is corrupt.
+ for (unsigned i = 50; i > 0; --i) {
+ if (m_spinlock.testAndSetAcquire(0, 1)) {
+ return true;
+ }
+
+ // Don't steal the processor and starve the thread we're waiting
+ // on.
+ loopSpinPause();
+ }
+
+ return false;
+ }
+
+ void unlock() override
+ {
+ m_spinlock.testAndSetRelease(1, 0);
+ }
+
+private:
+#ifdef Q_CC_GNU
+ __attribute__((always_inline, gnu_inline
+#if !defined(Q_CC_INTEL) && !defined(Q_CC_CLANG)
+ , artificial
+#endif
+ ))
+#endif
+ static inline void loopSpinPause()
+ {
+ // TODO: Spinning might be better in multi-core systems... but that means
+ // figuring how to find numbers of CPUs in a cross-platform way.
+#ifdef _POSIX_PRIORITY_SCHEDULING
+ sched_yield();
+#else
+ // Sleep for shortest possible time (nanosleep should round-up).
+ struct timespec wait_time = { 0 /* sec */, 100 /* ns */ };
+ ::nanosleep(&wait_time, static_cast<struct timespec *>(0));
+#endif
+ }
+
+ QBasicAtomicInt &m_spinlock;
+};
+
+#ifdef KSDC_THREAD_PROCESS_SHARED_SUPPORTED
+class pthreadLock : public KSDCLock
+{
+public:
+ pthreadLock(pthread_mutex_t &mutex)
+ : m_mutex(mutex)
+ {
+ }
+
+ bool initialize(bool &processSharingSupported) override
+ {
+ // Setup process-sharing.
+ pthread_mutexattr_t mutexAttr;
+ processSharingSupported = false;
+
+ // Initialize attributes, enable process-shared primitives, and setup
+ // the mutex.
+ if (::sysconf(_SC_THREAD_PROCESS_SHARED) >= 200112L && pthread_mutexattr_init(&mutexAttr) == 0) {
+ if (pthread_mutexattr_setpshared(&mutexAttr, PTHREAD_PROCESS_SHARED) == 0 &&
+ pthread_mutex_init(&m_mutex, &mutexAttr) == 0) {
+ processSharingSupported = true;
+ }
+ pthread_mutexattr_destroy(&mutexAttr);
+ }
+
+ // Attempt to setup for thread-only synchronization.
+ if (!processSharingSupported && pthread_mutex_init(&m_mutex, nullptr) != 0) {
+ return false;
+ }
+
+ return true;
+ }
+
+ bool lock() override
+ {
+ return pthread_mutex_lock(&m_mutex) == 0;
+ }
+
+ void unlock() override
+ {
+ pthread_mutex_unlock(&m_mutex);
+ }
+
+protected:
+ pthread_mutex_t &m_mutex;
+};
+#endif
+
+#if defined(KSDC_THREAD_PROCESS_SHARED_SUPPORTED) && defined(KSDC_TIMEOUTS_SUPPORTED)
+class pthreadTimedLock : public pthreadLock
+{
+public:
+ pthreadTimedLock(pthread_mutex_t &mutex)
+ : pthreadLock(mutex)
+ {
+ }
+
+ bool lock() override
+ {
+ struct timespec timeout;
+
+ // Long timeout, but if we fail to meet this timeout it's probably a cache
+ // corruption (and if we take 8 seconds then it should be much much quicker
+ // the next time anyways since we'd be paged back in from disk)
+ timeout.tv_sec = 10 + ::time(nullptr); // Absolute time, so 10 seconds from now
+ timeout.tv_nsec = 0;
+
+ return pthread_mutex_timedlock(&m_mutex, &timeout) == 0;
+ }
+};
+#endif
+
+#ifdef KSDC_SEMAPHORES_SUPPORTED
+class semaphoreLock : public KSDCLock
+{
+public:
+ semaphoreLock(sem_t &semaphore)
+ : m_semaphore(semaphore)
+ {
+ }
+
+ bool initialize(bool &processSharingSupported) override
+ {
+ processSharingSupported = false;
+ if (::sysconf(_SC_SEMAPHORES) < 200112L) {
+ return false;
+ }
+
+ // sem_init sets up process-sharing for us.
+ if (sem_init(&m_semaphore, 1, 1) == 0) {
+ processSharingSupported = true;
+ }
+ // If not successful try falling back to thread-shared.
+ else if (sem_init(&m_semaphore, 0, 1) != 0) {
+ return false;
+ }
+
+ return true;
+ }
+
+ bool lock() override
+ {
+ return sem_wait(&m_semaphore) == 0;
+ }
+
+ void unlock() override
+ {
+ sem_post(&m_semaphore);
+ }
+
+protected:
+ sem_t &m_semaphore;
+};
+#endif
+
+#if defined(KSDC_SEMAPHORES_SUPPORTED) && defined(KSDC_TIMEOUTS_SUPPORTED)
+class semaphoreTimedLock : public semaphoreLock
+{
+public:
+ semaphoreTimedLock(sem_t &semaphore)
+ : semaphoreLock(semaphore)
+ {
+ }
+
+ bool lock() override
+ {
+ struct timespec timeout;
+
+ // Long timeout, but if we fail to meet this timeout it's probably a cache
+ // corruption (and if we take 8 seconds then it should be much much quicker
+ // the next time anyways since we'd be paged back in from disk)
+ timeout.tv_sec = 10 + ::time(nullptr); // Absolute time, so 10 seconds from now
+ timeout.tv_nsec = 0;
+
+ return sem_timedwait(&m_semaphore, &timeout) == 0;
+ }
+};
+#endif
+
+// This enum controls the type of the locking used for the cache to allow
+// for as much portability as possible. This value will be stored in the
+// cache and used by multiple processes, therefore you should consider this
+// a versioned field, do not re-arrange.
+enum SharedLockId {
+ LOCKTYPE_INVALID = 0,
+ LOCKTYPE_MUTEX = 1, // pthread_mutex
+ LOCKTYPE_SEMAPHORE = 2, // sem_t
+ LOCKTYPE_SPINLOCK = 3 // atomic int in shared memory
+};
+
+// This type is a union of all possible lock types, with a SharedLockId used
+// to choose which one is actually in use.
+struct SharedLock {
+ union {
+#if defined(KSDC_THREAD_PROCESS_SHARED_SUPPORTED)
+ pthread_mutex_t mutex;
+#endif
+#if defined(KSDC_SEMAPHORES_SUPPORTED)
+ sem_t semaphore;
+#endif
+ QBasicAtomicInt spinlock;
+
+ // It would be highly unfortunate if a simple glibc upgrade or kernel
+ // addition caused this structure to change size when an existing
+ // lock was thought present, so reserve enough size to cover any
+ // reasonable locking structure
+ char unused[64];
+ };
+
+ SharedLockId type;
+};
+
+/**
+ * This is a method to determine the best lock type to use for a
+ * shared cache, based on local support. An identifier to the appropriate
+ * SharedLockId is returned, which can be passed to createLockFromId().
+ */
+static SharedLockId findBestSharedLock()
+{
+ // We would prefer a process-shared capability that also supports
+ // timeouts. Failing that, process-shared is preferred over timeout
+ // support. Failing that we'll go thread-local
+ bool timeoutsSupported = false;
+ bool pthreadsProcessShared = false;
+ bool semaphoresProcessShared = false;
+
+#ifdef KSDC_TIMEOUTS_SUPPORTED
+ timeoutsSupported = ::sysconf(_SC_TIMEOUTS) >= 200112L;
+#endif
+
+ // Now that we've queried timeouts, try actually creating real locks and
+ // seeing if there's issues with that.
+#ifdef KSDC_THREAD_PROCESS_SHARED_SUPPORTED
+ {
+ pthread_mutex_t tempMutex;
+ QSharedPointer<KSDCLock> tempLock;
+ if (timeoutsSupported) {
+#ifdef KSDC_TIMEOUTS_SUPPORTED
+ tempLock = QSharedPointer<KSDCLock>(new pthreadTimedLock(tempMutex));
+#endif
+ } else {
+ tempLock = QSharedPointer<KSDCLock>(new pthreadLock(tempMutex));
+ }
+
+ tempLock->initialize(pthreadsProcessShared);
+ }
+#endif
+
+ // Our first choice is pthread_mutex_t for compatibility.
+ if (timeoutsSupported && pthreadsProcessShared) {
+ return LOCKTYPE_MUTEX;
+ }
+
+#ifdef KSDC_SEMAPHORES_SUPPORTED
+ {
+ sem_t tempSemaphore;
+ QSharedPointer<KSDCLock> tempLock;
+ if (timeoutsSupported) {
+ tempLock = QSharedPointer<KSDCLock>(new semaphoreTimedLock(tempSemaphore));
+ } else {
+ tempLock = QSharedPointer<KSDCLock>(new semaphoreLock(tempSemaphore));
+ }
+
+ tempLock->initialize(semaphoresProcessShared);
+ }
+#endif
+
+ if (timeoutsSupported && semaphoresProcessShared) {
+ return LOCKTYPE_SEMAPHORE;
+ } else if (pthreadsProcessShared) {
+ return LOCKTYPE_MUTEX;
+ } else if (semaphoresProcessShared) {
+ return LOCKTYPE_SEMAPHORE;
+ }
+
+ // Fallback to a dumb-simple but possibly-CPU-wasteful solution.
+ return LOCKTYPE_SPINLOCK;
+}
+
+static KSDCLock *createLockFromId(SharedLockId id, SharedLock &lock)
+{
+ switch (id) {
+#ifdef KSDC_THREAD_PROCESS_SHARED_SUPPORTED
+ case LOCKTYPE_MUTEX:
+#ifdef KSDC_TIMEOUTS_SUPPORTED
+ if (::sysconf(_SC_TIMEOUTS) >= 200112L) {
+ return new pthreadTimedLock(lock.mutex);
+ }
+#endif
+ return new pthreadLock(lock.mutex);
+
+ break;
+#endif
+
+#ifdef KSDC_SEMAPHORES_SUPPORTED
+ case LOCKTYPE_SEMAPHORE:
+#ifdef KSDC_TIMEOUTS_SUPPORTED
+ if (::sysconf(_SC_SEMAPHORES) >= 200112L) {
+ return new semaphoreTimedLock(lock.semaphore);
+ }
+#endif
+ return new semaphoreLock(lock.semaphore);
+
+ break;
+#endif
+
+ case LOCKTYPE_SPINLOCK:
+ return new simpleSpinLock(lock.spinlock);
+ break;
+
+ default:
+ qCritical() << "Creating shell of a lock!";
+ return new KSDCLock;
+ }
+}
+
+static bool ensureFileAllocated(int fd, size_t fileSize)
+{
+#ifdef KSDC_POSIX_FALLOCATE_SUPPORTED
+ int result;
+ while ((result = ::posix_fallocate(fd, 0, fileSize)) == EINTR) {
+ ;
+ }
+
+ if (result != 0) {
+ if (result == ENOSPC) {
+ qCritical() << "No space left on device. Check filesystem free space at your XDG_CACHE_HOME!";
+ }
+ qCritical() << "The operating system is unable to promise"
+ << fileSize
+ << "bytes for mapped cache, "
+ "abandoning the cache for crash-safety.";
+ return false;
+ }
+
+ return true;
+#else
+
+#ifdef __GNUC__
+#warning "This system does not seem to support posix_fallocate, which is needed to ensure KSharedDataCache's underlying files are fully committed to disk to avoid crashes with low disk space."
+#endif
+ qCWarning(KCOREADDONS_DEBUG) << "This system misses support for posix_fallocate()"
+ " -- ensure this partition has room for at least"
+ << fileSize << "bytes.";
+
+ // TODO: It's possible to emulate the functionality, but doing so
+ // overwrites the data in the file so we don't do this. If you were to add
+ // this emulation, you must ensure it only happens on initial creation of a
+ // new file and not just mapping an existing cache.
+
+ return true;
+#endif
+}
+
+#endif /* KSHAREDDATACACHE_P_H */
--- /dev/null
+/*
+ * This file is part of the KDE project.
+ * Copyright © 2010 Michael Pyne <mpyne@kde.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License version 2 as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/**
+ * This is a horrifically simple implementation of KSharedDataCache that is
+ * basically missing the "shared" part to it, for use on Windows or other platforms
+ * that don't support POSIX.
+ */
+#include "kshareddatacache.h"
+
+#include <QString>
+#include <QByteArray>
+#include <QCache>
+
+class Q_DECL_HIDDEN KSharedDataCache::Private
+{
+public:
+ KSharedDataCache::EvictionPolicy evictionPolicy;
+ QCache<QString, QByteArray> cache;
+};
+
+KSharedDataCache::KSharedDataCache(const QString &cacheName,
+ unsigned defaultCacheSize,
+ unsigned expectedItemSize)
+ : d(new Private)
+{
+ d->cache.setMaxCost(defaultCacheSize);
+
+ Q_UNUSED(cacheName);
+ Q_UNUSED(expectedItemSize);
+}
+
+KSharedDataCache::~KSharedDataCache()
+{
+ delete d;
+}
+
+KSharedDataCache::EvictionPolicy KSharedDataCache::evictionPolicy() const
+{
+ return d->evictionPolicy;
+}
+
+void KSharedDataCache::setEvictionPolicy(KSharedDataCache::EvictionPolicy newPolicy)
+{
+ d->evictionPolicy = newPolicy;
+}
+
+bool KSharedDataCache::insert(const QString &key, const QByteArray &data)
+{
+ return d->cache.insert(key, new QByteArray(data));
+}
+
+bool KSharedDataCache::find(const QString &key, QByteArray *destination) const
+{
+ QByteArray *value = d->cache.object(key);
+
+ if (value) {
+ if (destination) {
+ *destination = *value;
+ }
+ return true;
+ } else {
+ return false;
+ }
+}
+
+void KSharedDataCache::clear()
+{
+ d->cache.clear();
+}
+
+void KSharedDataCache::deleteCache(const QString &cacheName)
+{
+ Q_UNUSED(cacheName);
+}
+
+bool KSharedDataCache::contains(const QString &key) const
+{
+ return d->cache.contains(key);
+}
+
+unsigned KSharedDataCache::totalSize() const
+{
+ return static_cast<unsigned>(d->cache.maxCost());
+}
+
+unsigned KSharedDataCache::freeSize() const
+{
+ if (d->cache.totalCost() < d->cache.maxCost()) {
+ return static_cast<unsigned>(d->cache.maxCost() - d->cache.totalCost());
+ } else {
+ return 0;
+ }
+}
+
+unsigned KSharedDataCache::timestamp() const
+{
+ return 0;
+}
+
+void KSharedDataCache::setTimestamp(unsigned newTimestamp)
+{
+}
--- /dev/null
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+ * ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla code.
+ *
+ * The Initial Developer of the Original Code is
+ * Mozilla Foundation.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Taras Glek <tglek@mozilla.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+#ifndef POSIX_FALLOCATE_MAC_H
+#define POSIX_FALLOCATE_MAC_H
+
+#include <fcntl.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+// created from the OSX-specific code from Mozilla's mozilla::fallocation() function
+// of which the licensing information is copied above.
+// Adaptation (C) 2015,2016 R.J.V. Bertin
+
+
+// From Linux `man posix_fallocate`:
+// DESCRIPTION
+// The function posix_fallocate() ensures that disk space is allocated for
+// the file referred to by the descriptor fd for the bytes in the range
+// starting at offset and continuing for len bytes. After a successful
+// call to posix_fallocate(), subsequent writes to bytes in the specified
+// range are guaranteed not to fail because of lack of disk space.
+//
+// If the size of the file is less than offset+len, then the file is
+// increased to this size; otherwise the file size is left unchanged.
+
+// From OS X man fcntl:
+// F_PREALLOCATE Preallocate file storage space. Note: upon success, the space
+// that is allocated can be the same size or larger than the space
+// requested.
+// The F_PREALLOCATE command operates on the following structure:
+// typedef struct fstore {
+// u_int32_t fst_flags; /* IN: flags word */
+// int fst_posmode; /* IN: indicates offset field */
+// off_t fst_offset; /* IN: start of the region */
+// off_t fst_length; /* IN: size of the region */
+// off_t fst_bytesalloc; /* OUT: number of bytes allocated */
+// } fstore_t;
+// The flags (fst_flags) for the F_PREALLOCATE command are as follows:
+// F_ALLOCATECONTIG Allocate contiguous space.
+// F_ALLOCATEALL Allocate all requested space or no space at all.
+// The position modes (fst_posmode) for the F_PREALLOCATE command indicate how to use
+// the offset field. The modes are as follows:
+// F_PEOFPOSMODE Allocate from the physical end of file.
+// F_VOLPOSMODE Allocate from the volume offset.
+
+// From OS X man ftruncate:
+// DESCRIPTION
+// ftruncate() and truncate() cause the file named by path, or referenced by fildes, to
+// be truncated (or extended) to length bytes in size. If the file size exceeds length,
+// any extra data is discarded. If the file size is smaller than length, the file
+// extended and filled with zeros to the indicated length. The ftruncate() form requires
+// the file to be open for writing.
+// Note: ftruncate() and truncate() do not modify the current file offset for any open
+// file descriptions associated with the file.
+
+
+static int posix_fallocate(int fd, off_t offset, off_t len)
+{
+ off_t c_test;
+ int ret;
+ if (!__builtin_saddll_overflow(offset, len, &c_test)) {
+ fstore_t store = {F_ALLOCATECONTIG, F_PEOFPOSMODE, 0, offset + len};
+ // Try to get a continuous chunk of disk space
+ fcntl(fd, F_PREALLOCATE, &store);
+ if (ret < 0) {
+ // OK, perhaps we are too fragmented, allocate non-continuous
+ store.fst_flags = F_ALLOCATEALL;
+ ret = fcntl(fd, F_PREALLOCATE, &store);
+ if (ret < 0) {
+ return ret;
+ }
+ }
+ ret = ftruncate(fd, offset + len);
+ } else {
+ // offset+len would overflow.
+ ret = -1;
+ }
+ return ret;
+}
+
+#endif
--- /dev/null
+#cmakedefine01 HAVE_FAM
+
+#cmakedefine01 HAVE_SYS_INOTIFY_H
--- /dev/null
+/* This file is part of the KDE libraries
+ Copyright (c) 2006 Jacob R Rideout <kde@jacobrideout.net>
+ Copyright (c) 2015 Nick Shaforostoff <shafff@ukr.net>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include "kautosavefile.h"
+
+#include <stdio.h> // for FILENAME_MAX
+
+#include <QLatin1Char>
+#include <QCoreApplication>
+#include <QDir>
+#include <QDebug>
+#include <QFile>
+#include <QLockFile>
+#include <QStandardPaths>
+#include "krandom.h"
+#include "kcoreaddons_debug.h"
+
+class KAutoSaveFilePrivate
+{
+public:
+ enum {NamePadding=8};
+
+ KAutoSaveFilePrivate()
+ : lock(nullptr),
+ managedFileNameChanged(false)
+ {}
+
+ QString tempFileName();
+ QUrl managedFile;
+ QLockFile *lock;
+ bool managedFileNameChanged;
+};
+
+static QStringList findAllStales(const QString &appName)
+{
+ const QStringList dirs = QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation);
+ QStringList files;
+
+ for (const QString &dir : dirs) {
+ QDir appDir(dir + QStringLiteral("/stalefiles/") + appName);
+ //qCDebug(KCOREADDONS_DEBUG) << "Looking in" << appDir.absolutePath();
+ Q_FOREACH (const QString &file, appDir.entryList(QDir::Files)) {
+ files << (appDir.absolutePath() + QLatin1Char('/') + file);
+ }
+ }
+ return files;
+}
+
+QString KAutoSaveFilePrivate::tempFileName()
+{
+ // Note: we drop any query string and user/pass info
+ const QString protocol(managedFile.scheme());
+ const QString path(managedFile.adjusted(QUrl::RemoveFilename | QUrl::StripTrailingSlash).path());
+ QString name(managedFile.fileName());
+
+ // Remove any part of the path to the right if it is longer than the max file size and
+ // ensure that the max filesize takes into account the other parts of the tempFileName
+ // Subtract 1 for the _ char, 3 for the padding separator, 5 is for the .lock
+ int pathLengthLimit = FILENAME_MAX - NamePadding - name.size() - protocol.size() - 9;
+
+ QString junk = KRandom::randomString(NamePadding);
+ // tempName = fileName + junk.truncated + protocol + _ + path.truncated + junk
+ // This is done so that the separation between the filename and path can be determined
+ name += junk.rightRef(3) + protocol + QLatin1Char('_') + path.leftRef(pathLengthLimit) + junk;
+
+ return QString::fromLatin1(QUrl::toPercentEncoding(name).constData());
+}
+
+KAutoSaveFile::KAutoSaveFile(const QUrl &filename, QObject *parent)
+ : QFile(parent),
+ d(new KAutoSaveFilePrivate)
+{
+ setManagedFile(filename);
+}
+
+KAutoSaveFile::KAutoSaveFile(QObject *parent)
+ : QFile(parent),
+ d(new KAutoSaveFilePrivate)
+{
+
+}
+
+KAutoSaveFile::~KAutoSaveFile()
+{
+ releaseLock();
+ delete d->lock;
+ delete d;
+}
+
+QUrl KAutoSaveFile::managedFile() const
+{
+ return d->managedFile;
+}
+
+void KAutoSaveFile::setManagedFile(const QUrl &filename)
+{
+ releaseLock();
+
+ d->managedFile = filename;
+ d->managedFileNameChanged = true;
+}
+
+void KAutoSaveFile::releaseLock()
+{
+ if (d->lock && d->lock->isLocked()) {
+ delete d->lock;
+ d->lock = nullptr;
+ if (!fileName().isEmpty()) {
+ remove();
+ }
+ }
+}
+
+bool KAutoSaveFile::open(OpenMode openmode)
+{
+ if (d->managedFile.isEmpty()) {
+ return false;
+ }
+
+ QString tempFile;
+ if (d->managedFileNameChanged) {
+ QString staleFilesDir = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) +
+ QStringLiteral("/stalefiles/") + QCoreApplication::instance()->applicationName();
+ if (!QDir().mkpath(staleFilesDir)) {
+ return false;
+ }
+ tempFile = staleFilesDir + QChar::fromLatin1('/') + d->tempFileName();
+ } else {
+ tempFile = fileName();
+ }
+
+ d->managedFileNameChanged = false;
+
+ setFileName(tempFile);
+
+ if (QFile::open(openmode)) {
+
+ if (!d->lock)
+ {
+ d->lock = new QLockFile(tempFile + QStringLiteral(".lock"));
+ d->lock->setStaleLockTime(60 * 1000); // HARDCODE, 1 minute
+ }
+
+ if (d->lock->isLocked() || d->lock->tryLock()) {
+ return true;
+ } else {
+ qCWarning(KCOREADDONS_DEBUG)<<"Could not lock file:"<<tempFile;
+ close();
+ }
+ }
+
+ return false;
+}
+
+static QUrl extractManagedFilePath(const QString& staleFileName)
+{
+ const QStringRef sep = staleFileName.rightRef(3);
+ int sepPos = staleFileName.indexOf(sep);
+ int pathPos = staleFileName.indexOf(QChar::fromLatin1('_'), sepPos);
+ QUrl managedFileName;
+ //name.setScheme(file.mid(sepPos + 3, pathPos - sep.size() - 3));
+ QByteArray encodedPath = staleFileName.midRef(pathPos+1, staleFileName.length()-pathPos-1-KAutoSaveFilePrivate::NamePadding).toLatin1();
+ managedFileName.setPath(QUrl::fromPercentEncoding(encodedPath) + QLatin1Char('/') + QFileInfo(QUrl::fromPercentEncoding(staleFileName.left(sepPos).toLatin1())).fileName());
+ return managedFileName;
+}
+
+QList<KAutoSaveFile *> KAutoSaveFile::staleFiles(const QUrl &filename, const QString &applicationName)
+{
+ QString appName(applicationName);
+ if (appName.isEmpty()) {
+ appName = QCoreApplication::instance()->applicationName();
+ }
+
+ // get stale files
+ const QStringList files = findAllStales(appName);
+
+ QList<KAutoSaveFile *> list;
+
+ // contruct a KAutoSaveFile for stale files corresponding given filename
+ for (const QString &file : files) {
+ if (file.endsWith(QLatin1String(".lock")) || (!filename.isEmpty() && extractManagedFilePath(file).path()!=filename.path())) {
+ continue;
+ }
+
+ // sets managedFile
+ KAutoSaveFile *asFile = new KAutoSaveFile(filename.isEmpty()?extractManagedFilePath(file):filename);
+ asFile->setFileName(file);
+ asFile->d->managedFileNameChanged = false; // do not regenerate tempfile name
+ list.append(asFile);
+ }
+
+ return list;
+}
+
+QList<KAutoSaveFile *> KAutoSaveFile::allStaleFiles(const QString &applicationName)
+{
+ return staleFiles(QUrl(), applicationName);
+}
+
+#include "moc_kautosavefile.cpp"
--- /dev/null
+/* This file is part of the KDE libraries
+ Copyright (c) 2006 Jacob R Rideout <kde@jacobrideout.net>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef KAUTOSAVEFILE_H
+#define KAUTOSAVEFILE_H
+
+#include <kcoreaddons_export.h>
+
+#include <QFile>
+#include <QList>
+#include <QUrl>
+
+class KAutoSaveFilePrivate;
+/**
+ * \class KAutoSaveFile kautosavefile.h <KAutoSaveFile>
+ *
+ * @brief Creates and manages a temporary "auto-save" file.
+ * Autosave files are temporary files that applications use to store
+ * the unsaved data in a file they have open for
+ * editing. KAutoSaveFile allows you to easily create and manage such
+ * files, as well as to recover the unsaved data left over by a
+ * crashed or otherwise gone process.
+ *
+ * Each KAutoSaveFile object is associated with one specific file that
+ * the application holds open. KAutoSaveFile is also a QObject, so it
+ * can be reparented to the actual opened file object, so as to manage
+ * the lifetime of the temporary file.
+ *
+ * Typical use consists of:
+ * - verifying whether stale autosave files exist for the opened file
+ * - deciding whether to recover the old, autosaved data
+ * - if not recovering, creating a KAutoSaveFile object for the opened file
+ * - during normal execution of the program, periodically save unsaved
+ * data into the KAutoSaveFile file.
+ *
+ * KAutoSaveFile holds a lock on the autosave file, so it's safe to
+ * delete the file and recreate it later. Because of that, disposing
+ * of stale autosave files should be done with releaseLock(). No lock is
+ * held on the managed file.
+ *
+ * Examples:
+ * Opening a new file:
+ * @code
+ * void Document::open(const QUrl &url)
+ * {
+ * // check whether autosave files exist:
+ * QList<KAutoSaveFile *> staleFiles = KAutoSaveFile::staleFiles(url);
+ * if (!staleFiles.isEmpty()) {
+ * if (KMessageBox::questionYesNo(parent,
+ * "Auto-saved files exist. Do you want to recover them now?",
+ * "File Recovery",
+ * "Recover", "Don't recover") == KMessage::Yes) {
+ * recoverFiles(staleFiles);
+ * return;
+ * } else {
+ * // remove the stale files
+ * foreach (KAutoSaveFile *stale, staleFiles) {
+ * stale->open(QIODevice::ReadWrite);
+ * delete stale;
+ * }
+ * }
+ * }
+ *
+ * // create new autosave object
+ * m_autosave = new KAutoSaveFile(url, this);
+ *
+ * // continue the process of opening file 'url'
+ * ...
+ * }
+ * @endcode
+ *
+ * The function recoverFiles could loop over the list of files and do this:
+ * @code
+ * foreach (KAutoSaveFile *stale, staleFiles) {
+ * if (!stale->open(QIODevice::ReadWrite)) {
+ * // show an error message; we could not steal the lockfile
+ * // maybe another application got to the file before us?
+ * delete stale;
+ * continue;
+ * }
+ * Document *doc = new Document;
+ * doc->m_autosave = stale;
+ * stale->setParent(doc); // reparent
+ *
+ * doc->setUrl(stale->managedFile());
+ * doc->setContents(stale->readAll());
+ * doc->setState(Document::Modified); // mark it as modified and unsaved
+ *
+ * documentManager->addDocument(doc);
+ * }
+ * @endcode
+ *
+ * If the file is unsaved, periodically write the contents to the save file:
+ * @code
+ * if (!m_autosave->isOpen() && !m_autosave->open(QIODevice::ReadWrite)) {
+ * // show error: could not open the autosave file
+ * }
+ * m_autosave->write(contents());
+ * @endcode
+ *
+ * When the user saves the file, the autosaved file is no longer
+ * necessary and can be removed or emptied.
+ * @code
+ * m_autosave->resize(0); // leaves the file open
+ * @endcode
+ *
+ * @code
+ * m_autosave->remove(); // closes the file
+ * @endcode
+ *
+ * @author Jacob R Rideout <kde@jacobrideout.net>
+ */
+class KCOREADDONS_EXPORT KAutoSaveFile : public QFile
+{
+ Q_OBJECT
+public:
+ /**
+ * Constructs a KAutoSaveFile for file @p filename. The temporary
+ * file is not opened or created until actually needed. The file
+ * @p filename does not have to exist for KAutoSaveFile to be
+ * constructed (if it exists, it will not be touched).
+ *
+ * @param filename the filename that this KAutoSaveFile refers to
+ * @param parent the parent object
+ */
+ explicit KAutoSaveFile(const QUrl &filename, QObject *parent = nullptr);
+
+ /**
+ * @overload
+ * Constructs a KAutoSaveFile object. Note that you need to call
+ * setManagedFile() before calling open().
+ *
+ * @param parent the parent object
+ */
+ explicit KAutoSaveFile(QObject *parent = nullptr);
+
+ /**
+ * Destroys the KAutoSaveFile object, removes the autosave
+ * file and drops the lock being held (if any).
+ */
+ ~KAutoSaveFile() override;
+
+ /**
+ * Retrieves the URL of the file managed by KAutoSaveFile. This
+ * is the same URL that was given to setManagedFile() or the
+ * KAutoSaveFile constructor.
+ *
+ * This is the name of the real file being edited by the
+ * application. To get the name of the temporary file where data
+ * can be saved, use fileName() (after you have called open()).
+ */
+ QUrl managedFile() const;
+
+ /**
+ * Sets the URL of the file managed by KAutoSaveFile. This should
+ * be the name of the real file being edited by the application.
+ * If the file was previously set, this function calls releaseLock().
+ *
+ * @param filename the filename that this KAutoSaveFile refers to
+ */
+ void setManagedFile(const QUrl &filename);
+
+ /**
+ * Closes the autosave file resource and removes the lock
+ * file. The file name returned by fileName() will no longer be
+ * protected and can be overwritten by another application at any
+ * time. To obtain a new lock, call open() again.
+ *
+ * This function calls remove(), so the autosave temporary file
+ * will be removed too.
+ */
+ virtual void releaseLock();
+
+ /**
+ * Opens the autosave file and locks it if it wasn't already
+ * locked. The name of the temporary file where data can be saved
+ * to will be set by this function and can be retrieved with
+ * fileName(). It will not change unless releaseLock() is called. No
+ * other application will attempt to edit such a file either while
+ * the lock is held.
+ *
+ * @param openmode the mode that should be used to open the file,
+ * probably QIODevice::ReadWrite
+ * @returns true if the file could be opened (= locked and
+ * created), false if the operation failed
+ */
+ bool open(OpenMode openmode) override;
+
+ /**
+ * Checks for stale autosave files for the file @p url. Returns a list
+ * of autosave files that contain autosaved data left behind by
+ * other instances of the application, due to crashing or
+ * otherwise uncleanly exiting.
+ *
+ * It is the application's job to determine what to do with such
+ * unsaved data. Generally, this is done by asking the user if he
+ * wants to see the recovered data, and then allowing the user to
+ * save if he wants to.
+ *
+ * If not given, the application name is obtained from
+ * QCoreApplication, so be sure to have set it correctly before
+ * calling this function.
+ *
+ * This function returns a list of unopened KAutoSaveFile
+ * objects. By calling open() on them, the application will steal
+ * the lock. Subsequent releaseLock() or deleting of the object will
+ * then erase the stale autosave file.
+ */
+ static QList<KAutoSaveFile *> staleFiles(const QUrl &url,
+ const QString &applicationName =
+ QString());
+
+ /**
+ * Returns all stale autosave files left behind by crashed or
+ * otherwise gone instances of this application.
+ *
+ * If not given, the application name is obtained from
+ * QCoreApplication, so be sure to have set it correctly before
+ * calling this function.
+ *
+ * See staleFiles() for information on the returned objects.
+ */
+ static QList<KAutoSaveFile *> allStaleFiles(const QString &applicationName =
+ QString());
+
+private:
+ Q_DISABLE_COPY(KAutoSaveFile)
+ friend class KAutoSaveFilePrivate;
+ KAutoSaveFilePrivate *const d;
+};
+
+#endif // KAUTOSAVEFILE_H
--- /dev/null
+/*
+ This file is part of the KDE libraries
+ Copyright 1999 Waldo Bastian <bastian@kde.org>
+ Copyright 2006 Allen Winter <winter@kde.org>
+ Copyright 2006 Gregory S. Hayes <syncomm@kde.org>
+ Copyright 2006 Jaison Lee <lee.jaison@gmail.com>
+ Copyright 2011 Romain Perier <bambi@ubuntu.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include "kbackup.h"
+
+#include <QFileInfo>
+#include <QDir>
+#include <QProcess>
+
+#include <qstandardpaths.h>
+
+namespace KBackup
+{
+
+bool backupFile(const QString &qFilename, const QString &backupDir)
+{
+ // get backup type from config, by default use "simple"
+ // get extension from config, by default use "~"
+ // get max number of backups from config, by default set to 10
+#pragma message("KDE5 TODO: Remove KConfig correctly")
+#if 0
+ KConfigGroup g(KSharedConfig::openConfig(), "Backups"); // look in the Backups section
+ QString type = g.readEntry("Type", "simple");
+ QString extension = g.readEntry("Extension", "~");
+ QString message = g.readEntry("Message", "Automated KDE Commit");
+ int maxnum = g.readEntry("MaxBackups", 10);
+ if (type.toLower() == QLatin1String("numbered")) {
+ return (numberedBackupFile(qFilename, backupDir, extension, maxnum));
+ } else if (type.toLower() == QLatin1String("rcs")) {
+ return (rcsBackupFile(qFilename, backupDir, message));
+ } else {
+ return (simpleBackupFile(qFilename, backupDir, extension));
+ }
+#endif
+ return (simpleBackupFile(qFilename, backupDir, QStringLiteral("~")));
+}
+
+bool simpleBackupFile(const QString &qFilename,
+ const QString &backupDir,
+ const QString &backupExtension)
+{
+ QString backupFileName = qFilename + backupExtension;
+
+ if (!backupDir.isEmpty()) {
+ QFileInfo fileInfo(qFilename);
+ backupFileName = backupDir + QLatin1Char('/') + fileInfo.fileName() + backupExtension;
+ }
+
+// qCDebug(KCOREADDONS_DEBUG) << "KBackup copying " << qFilename << " to " << backupFileName;
+ QFile::remove(backupFileName);
+ return QFile::copy(qFilename, backupFileName);
+}
+
+bool rcsBackupFile(const QString &qFilename,
+ const QString &backupDir,
+ const QString &backupMessage)
+{
+ QFileInfo fileInfo(qFilename);
+
+ QString qBackupFilename;
+ if (backupDir.isEmpty()) {
+ qBackupFilename = qFilename;
+ } else {
+ qBackupFilename = backupDir + fileInfo.fileName();
+ }
+ qBackupFilename += QString::fromLatin1(",v");
+
+ // If backupDir is specified, copy qFilename to the
+ // backupDir and perform the commit there, unlinking
+ // backupDir/qFilename when finished.
+ if (!backupDir.isEmpty()) {
+ if (!QFile::copy(qFilename, backupDir + fileInfo.fileName())) {
+ return false;
+ }
+ fileInfo.setFile(backupDir + QLatin1Char('/') + fileInfo.fileName());
+ }
+
+ const QString cipath = QStandardPaths::findExecutable(QStringLiteral("ci"));
+ const QString copath = QStandardPaths::findExecutable(QStringLiteral("co"));
+ const QString rcspath = QStandardPaths::findExecutable(QStringLiteral("rcs"));
+ if (cipath.isEmpty() || copath.isEmpty() || rcspath.isEmpty()) {
+ return false;
+ }
+
+ // Check in the file unlocked with 'ci'
+ QProcess ci;
+ if (!backupDir.isEmpty()) {
+ ci.setWorkingDirectory(backupDir);
+ }
+ ci.start(cipath, QStringList() << QStringLiteral("-u") << fileInfo.filePath());
+ if (!ci.waitForStarted()) {
+ return false;
+ }
+ ci.write(backupMessage.toLocal8Bit());
+ ci.write(".");
+ ci.closeWriteChannel();
+ if (!ci.waitForFinished()) {
+ return false;
+ }
+
+ // Use 'rcs' to unset strict locking
+ QProcess rcs;
+ if (!backupDir.isEmpty()) {
+ rcs.setWorkingDirectory(backupDir);
+ }
+ rcs.start(rcspath, QStringList() << QStringLiteral("-U") << qBackupFilename);
+ if (!rcs.waitForFinished()) {
+ return false;
+ }
+
+ // Use 'co' to checkout the current revision and restore permissions
+ QProcess co;
+ if (!backupDir.isEmpty()) {
+ co.setWorkingDirectory(backupDir);
+ }
+ co.start(copath, QStringList() << qBackupFilename);
+ if (!co.waitForFinished()) {
+ return false;
+ }
+
+ if (!backupDir.isEmpty()) {
+ return QFile::remove(fileInfo.filePath());
+ } else {
+ return true;
+ }
+}
+
+bool numberedBackupFile(const QString &qFilename,
+ const QString &backupDir,
+ const QString &backupExtension,
+ const uint maxBackups)
+{
+ QFileInfo fileInfo(qFilename);
+
+ // The backup file name template.
+ QString sTemplate;
+ if (backupDir.isEmpty()) {
+ sTemplate = qFilename + QLatin1String(".%1") + backupExtension;
+ } else {
+ sTemplate = backupDir + QLatin1Char('/') + fileInfo.fileName() + QLatin1String(".%1") + backupExtension;
+ }
+
+ // First, search backupDir for numbered backup files to remove.
+ // Remove all with number 'maxBackups' and greater.
+ QDir d = backupDir.isEmpty() ? fileInfo.dir() : backupDir;
+ d.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks);
+ const QStringList nameFilters = QStringList(fileInfo.fileName() + QLatin1String(".*") + backupExtension);
+ d.setNameFilters(nameFilters);
+ d.setSorting(QDir::Name);
+
+ uint maxBackupFound = 0;
+ Q_FOREACH (const QFileInfo &fi, d.entryInfoList()) {
+ if (fi.fileName().endsWith(backupExtension)) {
+ // sTemp holds the file name, without the ending backupExtension
+ QString sTemp = fi.fileName();
+ sTemp.truncate(fi.fileName().length() - backupExtension.length());
+ // compute the backup number
+ int idex = sTemp.lastIndexOf(QLatin1Char('.'));
+ if (idex > 0) {
+ bool ok;
+ uint num = sTemp.midRef(idex + 1).toUInt(&ok);
+ if (ok) {
+ if (num >= maxBackups) {
+ QFile::remove(fi.filePath());
+ } else {
+ maxBackupFound = qMax(maxBackupFound, num);
+ }
+ }
+ }
+ }
+ }
+
+ // Next, rename max-1 to max, max-2 to max-1, etc.
+ QString to = sTemplate.arg(maxBackupFound + 1);
+ for (int i = maxBackupFound; i > 0; i--) {
+ QString from = sTemplate.arg(i);
+// qCDebug(KCOREADDONS_DEBUG) << "KBackup renaming " << from << " to " << to;
+ QFile::rename(from, to);
+ to = from;
+ }
+
+ // Finally create most recent backup by copying the file to backup number 1.
+// qCDebug(KCOREADDONS_DEBUG) << "KBackup copying " << qFilename << " to " << sTemplate.arg(1);
+ return QFile::copy(qFilename, sTemplate.arg(1));
+}
+
+}
--- /dev/null
+/*
+ This file is part of the KDE libraries
+ Copyright 1999 Waldo Bastian <bastian@kde.org>
+ Copyright 2006 Jaison Lee <lee.jaison@gmail.com>
+ Copyright 2011 Romain Perier <bambi@ubuntu.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef KBACKUP_H
+#define KBACKUP_H
+
+#include <kcoreaddons_export.h>
+#include <QString>
+
+/**
+ * @namespace KBackup
+ * Provides utility functions for backup of files.
+ */
+namespace KBackup
+{
+/**
+ * @brief Function to create a backup file before saving.
+ *
+ * If empty (the default), the backup will be in the same directory as @p filename.
+ * The backup type (simple, rcs, or numbered), extension string, and maximum
+ * number of backup files are read from the user's global configuration.
+ * Use simpleBackupFile() or numberedBackupFile() to force one of these
+ * specific backup styles.
+ * You can use this method even if you don't use KSaveFile.
+ * @param filename the file to backup
+ * @param backupDir optional directory where to save the backup file in.
+ * @return true if successful, or false if an error has occurred.
+ */
+KCOREADDONS_EXPORT bool backupFile(const QString &filename,
+ const QString &backupDir = QString());
+
+/**
+* @brief Function to create a backup file for a given filename.
+*
+* This function creates a backup file from the given filename.
+* You can use this method even if you don't use KSaveFile.
+* @param filename the file to backup
+* @param backupDir optional directory where to save the backup file in.
+* If empty (the default), the backup will be in the same directory as @p filename.
+* @param backupExtension the extension to append to @p filename, "~" by default.
+* @return true if successful, or false if an error has occurred.
+*/
+KCOREADDONS_EXPORT bool simpleBackupFile(const QString &filename,
+ const QString &backupDir = QString(),
+ const QString &backupExtension = QStringLiteral("~"));
+
+/**
+ * @brief Function to create a backup file for a given filename.
+ *
+ * This function creates a series of numbered backup files from the
+ * given filename.
+ *
+ * The backup file names will be of the form:
+ * \<name\>.\<number\>\<extension\>
+ * for instance
+ * \verbatim chat.3.log \endverbatim
+ *
+ * The new backup file will be have the backup number 1.
+ * Each existing backup file will have its number incremented by 1.
+ * Any backup files with numbers greater than the maximum number
+ * permitted (@p maxBackups) will be removed.
+ * You can use this method even if you don't use KSaveFile.
+ *
+ * @param filename the file to backup
+ * @param backupDir optional directory where to save the backup file in.
+ * If empty (the default), the backup will be in the same directory as
+ * @p filename.
+ * @param backupExtension the extension to append to @p filename,
+ * which is "~" by default. Do not use an extension containing digits.
+ * @param maxBackups the maximum number of backup files permitted.
+ * For best performance a small number (10) is recommended.
+ * @return true if successful, or false if an error has occurred.
+ */
+KCOREADDONS_EXPORT bool numberedBackupFile(const QString &filename,
+ const QString &backupDir = QString(),
+ const QString &backupExtension = QStringLiteral("~"),
+ const uint maxBackups = 10
+ );
+
+/**
+ * @brief Function to create an rcs backup file for a given filename.
+ *
+ * This function creates a rcs-formatted backup file from the
+ * given filename.
+ *
+ * The backup file names will be of the form:
+ * \<name\>,v
+ * for instance
+ * \verbatim photo.jpg,v \endverbatim
+ *
+ * The new backup file will be in RCS format.
+ * Each existing backup file will be committed as a new revision.
+ * You can use this method even if you don't use KSaveFile.
+ *
+ * @param filename the file to backup
+ * @param backupDir optional directory where to save the backup file in.
+ * If empty (the default), the backup will be in the same directory as
+ * @p filename.
+ * @param backupMessage is the RCS commit message for this revision.
+ * @return true if successful, or false if an error has occurred.
+ */
+KCOREADDONS_EXPORT bool rcsBackupFile(const QString &filename,
+ const QString &backupDir = QString(),
+ const QString &backupMessage = QString()
+ );
+}
+
+#endif
--- /dev/null
+/* This file is part of the KDE libraries
+ Copyright (C) 1998 Sven Radej <sven@lisa.exp.univie.ac.at>
+ Copyright (C) 2006 Dirk Mueller <mueller@kde.org>
+ Copyright (C) 2007 Flavio Castelli <flavio.castelli@gmail.com>
+ Copyright (C) 2008 Rafal Rzepecki <divided.mind@gmail.com>
+ Copyright (C) 2010 David Faure <faure@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+// CHANGES:
+// Jul 30, 2008 - Don't follow symlinks when recursing to avoid loops (Rafal)
+// Aug 6, 2007 - KDirWatch::WatchModes support complete, flags work fine also
+// when using FAMD (Flavio Castelli)
+// Aug 3, 2007 - Handled KDirWatch::WatchModes flags when using inotify, now
+// recursive and file monitoring modes are implemented (Flavio Castelli)
+// Jul 30, 2007 - Substituted addEntry boolean params with KDirWatch::WatchModes
+// flag (Flavio Castelli)
+// Oct 4, 2005 - Inotify support (Dirk Mueller)
+// February 2002 - Add file watching and remote mount check for STAT
+// Mar 30, 2001 - Native support for Linux dir change notification.
+// Jan 28, 2000 - Usage of FAM service on IRIX (Josef.Weidendorfer@in.tum.de)
+// May 24. 1998 - List of times introduced, and some bugs are fixed. (sven)
+// May 23. 1998 - Removed static pointer - you can have more instances.
+// It was Needed for KRegistry. KDirWatch now emits signals and doesn't
+// call (or need) KFM. No more URL's - just plain paths. (sven)
+// Mar 29. 1998 - added docs, stop/restart for particular Dirs and
+// deep copies for list of dirs. (sven)
+// Mar 28. 1998 - Created. (sven)
+
+#include "kdirwatch.h"
+#include "kdirwatch_p.h"
+#include "kfilesystemtype.h"
+#include "kcoreaddons_debug.h"
+
+#include <io/config-kdirwatch.h>
+
+#include <sys/stat.h>
+#include <assert.h>
+#include <errno.h>
+#include <QLoggingCategory>
+#include <QDir>
+#include <QFile>
+#include <QSocketNotifier>
+#include <QTimer>
+#include <QThread>
+#include <QThreadStorage>
+#include <QCoreApplication>
+
+#include <qplatformdefs.h> // QT_LSTAT, QT_STAT, QT_STATBUF
+
+#include <stdlib.h>
+#include <string.h>
+
+#if HAVE_SYS_INOTIFY_H
+#include <unistd.h>
+#include <fcntl.h>
+#include <sys/inotify.h>
+
+#ifndef IN_DONT_FOLLOW
+#define IN_DONT_FOLLOW 0x02000000
+#endif
+
+#ifndef IN_ONLYDIR
+#define IN_ONLYDIR 0x01000000
+#endif
+
+// debug
+#include <sys/ioctl.h>
+
+#include <sys/utsname.h>
+
+#endif // HAVE_SYS_INOTIFY_H
+
+Q_DECLARE_LOGGING_CATEGORY(KDIRWATCH)
+// logging category for this framework, default: log stuff >= warning
+Q_LOGGING_CATEGORY(KDIRWATCH, "kf5.kcoreaddons.kdirwatch", QtWarningMsg)
+
+// set this to true for much more verbose debug output
+static bool s_verboseDebug = false;
+
+static QThreadStorage<KDirWatchPrivate *> dwp_self;
+static KDirWatchPrivate *createPrivate()
+{
+ if (!dwp_self.hasLocalData()) {
+ dwp_self.setLocalData(new KDirWatchPrivate);
+ }
+ return dwp_self.localData();
+}
+
+// Convert a string into a watch Method
+static KDirWatch::Method methodFromString(const QByteArray &method)
+{
+ if (method == "Fam") {
+ return KDirWatch::FAM;
+ } else if (method == "Stat") {
+ return KDirWatch::Stat;
+ } else if (method == "QFSWatch") {
+ return KDirWatch::QFSWatch;
+ } else {
+#if defined(HAVE_SYS_INOTIFY_H)
+ // inotify supports delete+recreate+modify, which QFSWatch doesn't support
+ return KDirWatch::INotify;
+#else
+ return KDirWatch::QFSWatch;
+#endif
+ }
+}
+
+static const char *methodToString(KDirWatch::Method method)
+{
+ switch (method) {
+ case KDirWatch::FAM:
+ return "Fam";
+ case KDirWatch::INotify:
+ return "INotify";
+ case KDirWatch::Stat:
+ return "Stat";
+ case KDirWatch::QFSWatch:
+ return "QFSWatch";
+ }
+ // not reached
+ return nullptr;
+}
+
+static const char s_envNfsPoll[] = "KDIRWATCH_NFSPOLLINTERVAL";
+static const char s_envPoll[] = "KDIRWATCH_POLLINTERVAL";
+static const char s_envMethod[] = "KDIRWATCH_METHOD";
+static const char s_envNfsMethod[] = "KDIRWATCH_NFSMETHOD";
+
+//
+// Class KDirWatchPrivate (singleton)
+//
+
+/* All entries (files/directories) to be watched in the
+ * application (coming from multiple KDirWatch instances)
+ * are registered in a single KDirWatchPrivate instance.
+ *
+ * At the moment, the following methods for file watching
+ * are supported:
+ * - Polling: All files to be watched are polled regularly
+ * using stat (more precise: QFileInfo.lastModified()).
+ * The polling frequency is determined from global kconfig
+ * settings, defaulting to 500 ms for local directories
+ * and 5000 ms for remote mounts
+ * - FAM (File Alternation Monitor): first used on IRIX, SGI
+ * has ported this method to LINUX. It uses a kernel part
+ * (IMON, sending change events to /dev/imon) and a user
+ * level daemon (fam), to which applications connect for
+ * notification of file changes. For NFS, the fam daemon
+ * on the NFS server machine is used; if IMON is not built
+ * into the kernel, fam uses polling for local files.
+ * - INOTIFY: In LINUX 2.6.13, inode change notification was
+ * introduced. You're now able to watch arbitrary inode's
+ * for changes, and even get notification when they're
+ * unmounted.
+ */
+
+KDirWatchPrivate::KDirWatchPrivate()
+ : timer(),
+ freq(3600000), // 1 hour as upper bound
+ statEntries(0),
+ delayRemove(false),
+ rescan_all(false),
+ rescan_timer(),
+#if HAVE_SYS_INOTIFY_H
+ mSn(nullptr),
+#endif
+ _isStopped(false)
+{
+ // Debug unittest on CI
+ if (qAppName() == QLatin1String("kservicetest") || qAppName() == QLatin1String("filetypestest")) {
+ s_verboseDebug = true;
+ }
+ timer.setObjectName(QStringLiteral("KDirWatchPrivate::timer"));
+ connect(&timer, SIGNAL(timeout()), this, SLOT(slotRescan()));
+
+ m_nfsPollInterval = qEnvironmentVariableIsSet(s_envNfsPoll) ? qEnvironmentVariableIntValue(s_envNfsPoll) : 5000;
+ m_PollInterval = qEnvironmentVariableIsSet(s_envPoll) ? qEnvironmentVariableIntValue(s_envPoll) : 500;
+
+ m_preferredMethod = methodFromString(qEnvironmentVariableIsSet(s_envMethod) ? qgetenv(s_envMethod) : "inotify");
+ // The nfs method defaults to the normal (local) method
+ m_nfsPreferredMethod = methodFromString(qEnvironmentVariableIsSet(s_envNfsMethod) ? qgetenv(s_envNfsMethod) : "Fam");
+
+ QList<QByteArray> availableMethods;
+
+ availableMethods << "Stat";
+
+ // used for FAM and inotify
+ rescan_timer.setObjectName(QStringLiteral("KDirWatchPrivate::rescan_timer"));
+ rescan_timer.setSingleShot(true);
+ connect(&rescan_timer, SIGNAL(timeout()), this, SLOT(slotRescan()));
+
+#if HAVE_FAM
+ availableMethods << "FAM";
+ use_fam = true;
+ sn = nullptr;
+#endif
+
+#if HAVE_SYS_INOTIFY_H
+ supports_inotify = true;
+
+ m_inotify_fd = inotify_init();
+
+ if (m_inotify_fd <= 0) {
+ qCDebug(KDIRWATCH) << "Can't use Inotify, kernel doesn't support it";
+ supports_inotify = false;
+ }
+
+ //qCDebug(KDIRWATCH) << "INotify available: " << supports_inotify;
+ if (supports_inotify) {
+ availableMethods << "INotify";
+ (void)fcntl(m_inotify_fd, F_SETFD, FD_CLOEXEC);
+
+ mSn = new QSocketNotifier(m_inotify_fd, QSocketNotifier::Read, this);
+ connect(mSn, SIGNAL(activated(int)),
+ this, SLOT(inotifyEventReceived()));
+ }
+#endif
+#if HAVE_QFILESYSTEMWATCHER
+ availableMethods << "QFileSystemWatcher";
+ fsWatcher = nullptr;
+#endif
+
+ if (s_verboseDebug) {
+ qCDebug(KDIRWATCH) << "Available methods: " << availableMethods << "preferred=" << methodToString(m_preferredMethod);
+ }
+}
+
+// This is called on app exit (deleted by QThreadStorage)
+KDirWatchPrivate::~KDirWatchPrivate()
+{
+ timer.stop();
+
+#if HAVE_FAM
+ if (use_fam && sn) {
+ FAMClose(&fc);
+ }
+#endif
+#if HAVE_SYS_INOTIFY_H
+ if (supports_inotify) {
+ QT_CLOSE(m_inotify_fd);
+ }
+#endif
+#if HAVE_QFILESYSTEMWATCHER
+ delete fsWatcher;
+#endif
+}
+
+void KDirWatchPrivate::inotifyEventReceived()
+{
+ //qCDebug(KDIRWATCH);
+#if HAVE_SYS_INOTIFY_H
+ if (!supports_inotify) {
+ return;
+ }
+
+ int pending = -1;
+ int offsetStartRead = 0; // where we read into buffer
+ char buf[8192];
+ assert(m_inotify_fd > -1);
+ ioctl(m_inotify_fd, FIONREAD, &pending);
+
+ while (pending > 0) {
+
+ const int bytesToRead = qMin<int>(pending, sizeof(buf) - offsetStartRead);
+
+ int bytesAvailable = read(m_inotify_fd, &buf[offsetStartRead], bytesToRead);
+ pending -= bytesAvailable;
+ bytesAvailable += offsetStartRead;
+ offsetStartRead = 0;
+
+ int offsetCurrent = 0;
+ while (bytesAvailable >= int(sizeof(struct inotify_event))) {
+ const struct inotify_event *const event = reinterpret_cast<inotify_event *>(&buf[offsetCurrent]);
+ const int eventSize = sizeof(struct inotify_event) + event->len;
+ if (bytesAvailable < eventSize) {
+ break;
+ }
+
+ bytesAvailable -= eventSize;
+ offsetCurrent += eventSize;
+
+ QString path;
+ // strip trailing null chars, see inotify_event documentation
+ // these must not end up in the final QString version of path
+ int len = event->len;
+ while (len > 1 && !event->name[len - 1]) {
+ --len;
+ }
+ QByteArray cpath(event->name, len);
+ if (len) {
+ path = QFile::decodeName(cpath);
+ }
+
+ if (!path.isEmpty() && isNoisyFile(cpath.data())) {
+ continue;
+ }
+
+ // Is set to true if the new event is a directory, false otherwise. This prevents a stat call in clientsForFileOrDir
+ const bool isDir = (event->mask & (IN_ISDIR));
+
+ Entry *e = m_inotify_wd_to_entry.value(event->wd);
+ if (!e) {
+ continue;
+ }
+ const bool wasDirty = e->dirty;
+ e->dirty = true;
+
+ const QString tpath = e->path + QLatin1Char('/') + path;
+
+ if (s_verboseDebug) {
+ qCDebug(KDIRWATCH).nospace() << "got event 0x" << qPrintable(QString::number(event->mask, 16)) << " for " << e->path;
+ }
+
+ if (event->mask & IN_DELETE_SELF) {
+ if (s_verboseDebug) {
+ qCDebug(KDIRWATCH) << "-->got deleteself signal for" << e->path;
+ }
+ e->m_status = NonExistent;
+ m_inotify_wd_to_entry.remove(e->wd);
+ e->wd = -1;
+ e->m_ctime = invalid_ctime;
+ emitEvent(e, Deleted, e->path);
+ // If the parent dir was already watched, tell it something changed
+ Entry *parentEntry = entry(e->parentDirectory());
+ if (parentEntry) {
+ parentEntry->dirty = true;
+ }
+ // Add entry to parent dir to notice if the entry gets recreated
+ addEntry(nullptr, e->parentDirectory(), e, true /*isDir*/);
+ }
+ if (event->mask & IN_IGNORED) {
+ // Causes bug #207361 with kernels 2.6.31 and 2.6.32!
+ //e->wd = -1;
+ }
+ if (event->mask & (IN_CREATE | IN_MOVED_TO)) {
+ Entry *sub_entry = e->findSubEntry(tpath);
+
+ if (s_verboseDebug) {
+ qCDebug(KDIRWATCH) << "-->got CREATE signal for" << (tpath) << "sub_entry=" << sub_entry;
+ qCDebug(KDIRWATCH) << *e;
+ }
+
+ // The code below is very similar to the one in checkFAMEvent...
+ if (sub_entry) {
+ // We were waiting for this new file/dir to be created
+ sub_entry->dirty = true;
+ rescan_timer.start(0); // process this asap, to start watching that dir
+ } else if (e->isDir && !e->m_clients.empty()) {
+ const QList<const Client *> clients = e->inotifyClientsForFileOrDir(isDir);
+ // See discussion in addEntry for why we don't addEntry for individual
+ // files in WatchFiles mode with inotify.
+ if (isDir) {
+ for (const Client *client : clients) {
+ addEntry(client->instance, tpath, nullptr, isDir,
+ isDir ? client->m_watchModes : KDirWatch::WatchDirOnly);
+ }
+ }
+ if (!clients.isEmpty()) {
+ emitEvent(e, Created, tpath);
+ qCDebug(KDIRWATCH).nospace() << clients.count() << " instance(s) monitoring the new "
+ << (isDir ? "dir " : "file ") << tpath;
+ }
+ e->m_pendingFileChanges.append(e->path);
+ if (!rescan_timer.isActive()) {
+ rescan_timer.start(m_PollInterval); // singleshot
+ }
+ }
+ }
+ if (event->mask & (IN_DELETE | IN_MOVED_FROM)) {
+ if (s_verboseDebug) {
+ qCDebug(KDIRWATCH) << "-->got DELETE signal for" << tpath;
+ }
+ if ((e->isDir) && (!e->m_clients.empty())) {
+ // A file in this directory has been removed. It wasn't an explicitly
+ // watched file as it would have its own watch descriptor, so
+ // no addEntry/ removeEntry bookkeeping should be required. Emit
+ // the event immediately if any clients are interested.
+ KDirWatch::WatchModes flag = isDir ? KDirWatch::WatchSubDirs : KDirWatch::WatchFiles;
+ int counter = 0;
+ for (const Client &client : e->m_clients) {
+ if (client.m_watchModes & flag) {
+ counter++;
+ }
+ }
+ if (counter != 0) {
+ emitEvent(e, Deleted, tpath);
+ }
+ }
+ }
+ if (event->mask & (IN_MODIFY | IN_ATTRIB)) {
+ if ((e->isDir) && (!e->m_clients.empty())) {
+ if (s_verboseDebug) {
+ qCDebug(KDIRWATCH) << "-->got MODIFY signal for" << (tpath);
+ }
+ // A file in this directory has been changed. No
+ // addEntry/ removeEntry bookkeeping should be required.
+ // Add the path to the list of pending file changes if
+ // there are any interested clients.
+ //QT_STATBUF stat_buf;
+ //QByteArray tpath = QFile::encodeName(e->path+'/'+path);
+ //QT_STAT(tpath, &stat_buf);
+ //bool isDir = S_ISDIR(stat_buf.st_mode);
+
+ // The API doc is somewhat vague as to whether we should emit
+ // dirty() for implicitly watched files when WatchFiles has
+ // not been specified - we'll assume they are always interested,
+ // regardless.
+ // Don't worry about duplicates for the time
+ // being; this is handled in slotRescan.
+ e->m_pendingFileChanges.append(tpath);
+ // Avoid stat'ing the directory if only an entry inside it changed.
+ e->dirty = (wasDirty || (path.isEmpty() && (event->mask & IN_ATTRIB)));
+ }
+ }
+
+ if (!rescan_timer.isActive()) {
+ rescan_timer.start(m_PollInterval); // singleshot
+ }
+ }
+ if (bytesAvailable > 0) {
+ // copy partial event to beginning of buffer
+ memmove(buf, &buf[offsetCurrent], bytesAvailable);
+ offsetStartRead = bytesAvailable;
+ }
+ }
+#endif
+}
+
+KDirWatchPrivate::Entry::~Entry()
+{
+}
+
+/* In FAM mode, only entries which are marked dirty are scanned.
+ * We first need to mark all yet nonexistent, but possible created
+ * entries as dirty...
+ */
+void KDirWatchPrivate::Entry::propagate_dirty()
+{
+ Q_FOREACH (Entry *sub_entry, m_entries) {
+ if (!sub_entry->dirty) {
+ sub_entry->dirty = true;
+ sub_entry->propagate_dirty();
+ }
+ }
+}
+
+/* A KDirWatch instance is interested in getting events for
+ * this file/Dir entry.
+ */
+void KDirWatchPrivate::Entry::addClient(KDirWatch *instance,
+ KDirWatch::WatchModes watchModes)
+{
+ if (instance == nullptr) {
+ return;
+ }
+
+ for (Client &client : m_clients) {
+ if (client.instance == instance) {
+ client.count++;
+ client.m_watchModes = watchModes;
+ return;
+ }
+ }
+
+ m_clients.emplace_back(instance, watchModes);
+}
+
+void KDirWatchPrivate::Entry::removeClient(KDirWatch *instance)
+{
+ auto it = m_clients.begin();
+ const auto end = m_clients.end();
+ for (; it != end; ++it) {
+ Client &client = *it;
+ if (client.instance == instance) {
+ client.count--;
+ if (client.count == 0) {
+ m_clients.erase(it);
+ }
+ return;
+ }
+ }
+}
+
+/* get number of clients */
+int KDirWatchPrivate::Entry::clientCount() const
+{
+ int clients = 0;
+ for (const Client &client : m_clients) {
+ clients += client.count;
+ }
+
+ return clients;
+}
+
+QString KDirWatchPrivate::Entry::parentDirectory() const
+{
+ return QDir::cleanPath(path + QLatin1String("/.."));
+}
+
+QList<const KDirWatchPrivate::Client *> KDirWatchPrivate::Entry::clientsForFileOrDir(const QString &tpath, bool *isDir) const
+{
+ QList<const Client *> ret;
+ QFileInfo fi(tpath);
+ if (fi.exists()) {
+ *isDir = fi.isDir();
+ const KDirWatch::WatchModes flag = *isDir ? KDirWatch::WatchSubDirs : KDirWatch::WatchFiles;
+ for (const Client &client : m_clients) {
+ if (client.m_watchModes & flag) {
+ ret.append(&client);
+ }
+ }
+ } else {
+ // Happens frequently, e.g. ERROR: couldn't stat "/home/dfaure/.viminfo.tmp"
+ //qCDebug(KDIRWATCH) << "ERROR: couldn't stat" << tpath;
+ // In this case isDir is not set, but ret is empty anyway
+ // so isDir won't be used.
+ }
+ return ret;
+}
+
+// inotify specific function that doesn't call KDE::stat to figure out if we have a file or folder.
+// isDir is determined through inotify's "IN_ISDIR" flag in KDirWatchPrivate::inotifyEventReceived
+QList<const KDirWatchPrivate::Client *> KDirWatchPrivate::Entry::inotifyClientsForFileOrDir(bool isDir) const
+{
+ QList<const Client *> ret;
+ const KDirWatch::WatchModes flag = isDir ? KDirWatch::WatchSubDirs : KDirWatch::WatchFiles;
+ for (const Client &client : m_clients) {
+ if (client.m_watchModes & flag) {
+ ret.append(&client);
+ }
+ }
+ return ret;
+}
+
+QDebug operator<<(QDebug debug, const KDirWatchPrivate::Entry &entry)
+{
+ debug.nospace() << "[ Entry for " << entry.path << ", " << (entry.isDir ? "dir" : "file");
+ if (entry.m_status == KDirWatchPrivate::NonExistent) {
+ debug << ", non-existent";
+ }
+ debug << ", using " << ((entry.m_mode == KDirWatchPrivate::FAMMode) ? "FAM" :
+ (entry.m_mode == KDirWatchPrivate::INotifyMode) ? "INotify" :
+ (entry.m_mode == KDirWatchPrivate::QFSWatchMode) ? "QFSWatch" :
+ (entry.m_mode == KDirWatchPrivate::StatMode) ? "Stat" : "Unknown Method");
+#if HAVE_SYS_INOTIFY_H
+ if (entry.m_mode == KDirWatchPrivate::INotifyMode) {
+ debug << " inotify_wd=" << entry.wd;
+ }
+#endif
+ debug << ", has " << entry.m_clients.size() << " clients";
+ debug.space();
+ if (!entry.m_entries.isEmpty()) {
+ debug << ", nonexistent subentries:";
+ Q_FOREACH (KDirWatchPrivate::Entry *subEntry, entry.m_entries) {
+ debug << subEntry << subEntry->path;
+ }
+ }
+ debug << ']';
+ return debug;
+}
+
+KDirWatchPrivate::Entry *KDirWatchPrivate::entry(const QString &_path)
+{
+// we only support absolute paths
+ if (_path.isEmpty() || QDir::isRelativePath(_path)) {
+ return nullptr;
+ }
+
+ QString path(_path);
+
+ if (path.length() > 1 && path.endsWith(QLatin1Char('/'))) {
+ path.truncate(path.length() - 1);
+ }
+
+ EntryMap::Iterator it = m_mapEntries.find(path);
+ if (it == m_mapEntries.end()) {
+ return nullptr;
+ } else {
+ return &(*it);
+ }
+}
+
+// set polling frequency for a entry and adjust global freq if needed
+void KDirWatchPrivate::useFreq(Entry *e, int newFreq)
+{
+ e->freq = newFreq;
+
+ // a reasonable frequency for the global polling timer
+ if (e->freq < freq) {
+ freq = e->freq;
+ if (timer.isActive()) {
+ timer.start(freq);
+ }
+ qCDebug(KDIRWATCH) << "Global Poll Freq is now" << freq << "msec";
+ }
+}
+
+#if HAVE_FAM
+// setup FAM notification, returns false if not possible
+bool KDirWatchPrivate::useFAM(Entry *e)
+{
+ if (!use_fam) {
+ return false;
+ }
+
+ if (!sn) {
+ if (FAMOpen(&fc) == 0) {
+ sn = new QSocketNotifier(FAMCONNECTION_GETFD(&fc),
+ QSocketNotifier::Read, this);
+ connect(sn, SIGNAL(activated(int)),
+ this, SLOT(famEventReceived()));
+ } else {
+ use_fam = false;
+ return false;
+ }
+ }
+
+ // handle FAM events to avoid deadlock
+ // (FAM sends back all files in a directory when monitoring)
+ famEventReceived();
+
+ e->m_mode = FAMMode;
+ e->dirty = false;
+ e->m_famReportedSeen = false;
+
+ bool startedFAMMonitor = false;
+
+ if (e->isDir) {
+ if (e->m_status == NonExistent) {
+ // If the directory does not exist we watch the parent directory
+ addEntry(nullptr, e->parentDirectory(), e, true);
+ } else {
+ int res = FAMMonitorDirectory(&fc, QFile::encodeName(e->path).data(),
+ &(e->fr), e);
+ startedFAMMonitor = true;
+ if (res < 0) {
+ e->m_mode = UnknownMode;
+ use_fam = false;
+ delete sn;
+ sn = nullptr;
+ return false;
+ }
+ qCDebug(KDIRWATCH).nospace() << " Setup FAM (Req " << FAMREQUEST_GETREQNUM(&(e->fr))
+ << ") for " << e->path;
+ }
+ } else {
+ if (e->m_status == NonExistent) {
+ // If the file does not exist we watch the directory
+ addEntry(nullptr, QFileInfo(e->path).absolutePath(), e, true);
+ } else {
+ int res = FAMMonitorFile(&fc, QFile::encodeName(e->path).data(),
+ &(e->fr), e);
+ startedFAMMonitor = true;
+ if (res < 0) {
+ e->m_mode = UnknownMode;
+ use_fam = false;
+ delete sn;
+ sn = nullptr;
+ return false;
+ }
+
+ qCDebug(KDIRWATCH).nospace() << " Setup FAM (Req " << FAMREQUEST_GETREQNUM(&(e->fr))
+ << ") for " << e->path;
+ }
+ }
+
+ // handle FAM events to avoid deadlock
+ // (FAM sends back all files in a directory when monitoring)
+ do {
+ famEventReceived();
+ if (startedFAMMonitor && !e->m_famReportedSeen) {
+ // 50 is ~half the time it takes to setup a watch. If gamin's latency
+ // gets better, this can be reduced.
+ QThread::msleep(50);
+ }
+ } while (startedFAMMonitor &&!e->m_famReportedSeen);
+
+ return true;
+}
+#endif
+
+#if HAVE_SYS_INOTIFY_H
+// setup INotify notification, returns false if not possible
+bool KDirWatchPrivate::useINotify(Entry *e)
+{
+ //qCDebug(KDIRWATCH) << "trying to use inotify for monitoring";
+
+ e->wd = -1;
+ e->dirty = false;
+
+ if (!supports_inotify) {
+ return false;
+ }
+
+ e->m_mode = INotifyMode;
+
+ if (e->m_status == NonExistent) {
+ addEntry(nullptr, e->parentDirectory(), e, true);
+ return true;
+ }
+
+ // May as well register for almost everything - it's free!
+ int mask = IN_DELETE | IN_DELETE_SELF | IN_CREATE | IN_MOVE | IN_MOVE_SELF | IN_DONT_FOLLOW | IN_MOVED_FROM | IN_MODIFY | IN_ATTRIB;
+
+ if ((e->wd = inotify_add_watch(m_inotify_fd,
+ QFile::encodeName(e->path).data(), mask)) >= 0) {
+ m_inotify_wd_to_entry.insert(e->wd, e);
+ if (s_verboseDebug) {
+ qCDebug(KDIRWATCH) << "inotify successfully used for monitoring" << e->path << "wd=" << e->wd;
+ }
+ return true;
+ }
+
+ qCDebug(KDIRWATCH) << "inotify failed for monitoring" << e->path << ":" << strerror(errno);
+ return false;
+}
+#endif
+#if HAVE_QFILESYSTEMWATCHER
+bool KDirWatchPrivate::useQFSWatch(Entry *e)
+{
+ e->m_mode = QFSWatchMode;
+ e->dirty = false;
+
+ if (e->m_status == NonExistent) {
+ addEntry(nullptr, e->parentDirectory(), e, true /*isDir*/);
+ return true;
+ }
+
+ qCDebug(KDIRWATCH) << "fsWatcher->addPath" << e->path;
+ if (!fsWatcher) {
+ fsWatcher = new QFileSystemWatcher();
+ connect(fsWatcher, SIGNAL(directoryChanged(QString)), this, SLOT(fswEventReceived(QString)));
+ connect(fsWatcher, SIGNAL(fileChanged(QString)), this, SLOT(fswEventReceived(QString)));
+ }
+ fsWatcher->addPath(e->path);
+ return true;
+}
+#endif
+
+bool KDirWatchPrivate::useStat(Entry *e)
+{
+ if (KFileSystemType::fileSystemType(e->path) == KFileSystemType::Nfs) { // TODO: or Smbfs?
+ useFreq(e, m_nfsPollInterval);
+ } else {
+ useFreq(e, m_PollInterval);
+ }
+
+ if (e->m_mode != StatMode) {
+ e->m_mode = StatMode;
+ statEntries++;
+
+ if (statEntries == 1) {
+ // if this was first STAT entry (=timer was stopped)
+ timer.start(freq); // then start the timer
+ qCDebug(KDIRWATCH) << " Started Polling Timer, freq " << freq;
+ }
+ }
+
+ qCDebug(KDIRWATCH) << " Setup Stat (freq " << e->freq << ") for " << e->path;
+
+ return true;
+}
+
+/* If <instance> !=0, this KDirWatch instance wants to watch at <_path>,
+ * providing in <isDir> the type of the entry to be watched.
+ * Sometimes, entries are dependent on each other: if <sub_entry> !=0,
+ * this entry needs another entry to watch itself (when notExistent).
+ */
+void KDirWatchPrivate::addEntry(KDirWatch *instance, const QString &_path,
+ Entry *sub_entry, bool isDir, KDirWatch::WatchModes watchModes)
+{
+ QString path(_path);
+ if (path.startsWith(QLatin1String(":/"))) {
+ qCWarning(KDIRWATCH) << "Cannot watch QRC-like path" << path;
+ return;
+ }
+ if (path.isEmpty()
+#ifndef Q_OS_WIN
+ || path == QLatin1String("/dev")
+ || (path.startsWith(QLatin1String("/dev/")) && !path.startsWith(QLatin1String("/dev/."))
+ && !path.startsWith(QLatin1String("/dev/shm")))
+#endif
+ ) {
+ return; // Don't even go there.
+ }
+
+ if (path.length() > 1 && path.endsWith(QLatin1Char('/'))) {
+ path.truncate(path.length() - 1);
+ }
+
+ EntryMap::Iterator it = m_mapEntries.find(path);
+ if (it != m_mapEntries.end()) {
+ if (sub_entry) {
+ (*it).m_entries.append(sub_entry);
+ if (s_verboseDebug) {
+ qCDebug(KDIRWATCH) << "Added already watched Entry" << path
+ << "(for" << sub_entry->path << ")";
+ }
+ } else {
+ (*it).addClient(instance, watchModes);
+ if (s_verboseDebug) {
+ qCDebug(KDIRWATCH) << "Added already watched Entry" << path
+ << "(now" << (*it).clientCount() << "clients)"
+ << QStringLiteral("[%1]").arg(instance->objectName());
+ }
+ }
+ return;
+ }
+
+ // we have a new path to watch
+
+ QT_STATBUF stat_buf;
+ bool exists = (QT_STAT(QFile::encodeName(path).constData(), &stat_buf) == 0);
+
+ EntryMap::iterator newIt = m_mapEntries.insert(path, Entry());
+ // the insert does a copy, so we have to use <e> now
+ Entry *e = &(*newIt);
+
+ if (exists) {
+ e->isDir = (stat_buf.st_mode & QT_STAT_MASK) == QT_STAT_DIR;
+
+#ifndef Q_OS_WIN
+ if (e->isDir && !isDir) {
+ if (QT_LSTAT(QFile::encodeName(path).constData(), &stat_buf) == 0) {
+ if ((stat_buf.st_mode & QT_STAT_MASK) == QT_STAT_LNK) {
+ // if it's a symlink, don't follow it
+ e->isDir = false;
+ }
+ }
+ }
+#endif
+
+ if (e->isDir && !isDir) {
+ qCWarning(KCOREADDONS_DEBUG) << "KDirWatch:" << path << "is a directory. Use addDir!";
+ } else if (!e->isDir && isDir) {
+ qCWarning(KCOREADDONS_DEBUG) << "KDirWatch:" << path << "is a file. Use addFile!";
+ }
+
+ if (!e->isDir && (watchModes != KDirWatch::WatchDirOnly)) {
+ qCWarning(KCOREADDONS_DEBUG) << "KDirWatch:" << path << "is a file. You can't use recursive or "
+ "watchFiles options";
+ watchModes = KDirWatch::WatchDirOnly;
+ }
+
+#ifdef Q_OS_WIN
+ // ctime is the 'creation time' on windows - use mtime instead
+ e->m_ctime = stat_buf.st_mtime;
+#else
+ e->m_ctime = stat_buf.st_ctime;
+#endif
+ e->m_status = Normal;
+ e->m_nlink = stat_buf.st_nlink;
+ e->m_ino = stat_buf.st_ino;
+ } else {
+ e->isDir = isDir;
+ e->m_ctime = invalid_ctime;
+ e->m_status = NonExistent;
+ e->m_nlink = 0;
+ e->m_ino = 0;
+ }
+
+ e->path = path;
+ if (sub_entry) {
+ e->m_entries.append(sub_entry);
+ } else {
+ e->addClient(instance, watchModes);
+ }
+
+ if (s_verboseDebug) {
+ qCDebug(KDIRWATCH).nospace() << "Added " << (e->isDir ? "Dir " : "File ") << path
+ << (e->m_status == NonExistent ? " NotExisting" : "")
+ << " for " << (sub_entry ? sub_entry->path : QString())
+ << " [" << (instance ? instance->objectName() : QString()) << "]";
+ }
+
+ // now setup the notification method
+ e->m_mode = UnknownMode;
+ e->msecLeft = 0;
+
+ if (isNoisyFile(QFile::encodeName(path).data())) {
+ return;
+ }
+
+ if (exists && e->isDir && (watchModes != KDirWatch::WatchDirOnly)) {
+ QFlags<QDir::Filter> filters = QDir::NoDotAndDotDot;
+
+ if ((watchModes & KDirWatch::WatchSubDirs) &&
+ (watchModes & KDirWatch::WatchFiles)) {
+ filters |= (QDir::Dirs | QDir::Files);
+ } else if (watchModes & KDirWatch::WatchSubDirs) {
+ filters |= QDir::Dirs;
+ } else if (watchModes & KDirWatch::WatchFiles) {
+ filters |= QDir::Files;
+ }
+
+#if HAVE_SYS_INOTIFY_H
+ if (e->m_mode == INotifyMode || (e->m_mode == UnknownMode && m_preferredMethod == KDirWatch::INotify)) {
+ //qCDebug(KDIRWATCH) << "Ignoring WatchFiles directive - this is implicit with inotify";
+ // Placing a watch on individual files is redundant with inotify
+ // (inotify gives us WatchFiles functionality "for free") and indeed
+ // actively harmful, so prevent it. WatchSubDirs is necessary, though.
+ filters &= ~QDir::Files;
+ }
+#endif
+
+ QDir basedir(e->path);
+ const QFileInfoList contents = basedir.entryInfoList(filters);
+ for (QFileInfoList::const_iterator iter = contents.constBegin();
+ iter != contents.constEnd(); ++iter) {
+ const QFileInfo &fileInfo = *iter;
+ // treat symlinks as files--don't follow them.
+ bool isDir = fileInfo.isDir() && !fileInfo.isSymLink();
+
+ addEntry(instance, fileInfo.absoluteFilePath(), nullptr, isDir,
+ isDir ? watchModes : KDirWatch::WatchDirOnly);
+ }
+ }
+
+ addWatch(e);
+}
+
+void KDirWatchPrivate::addWatch(Entry *e)
+{
+ // If the watch is on a network filesystem use the nfsPreferredMethod as the
+ // default, otherwise use preferredMethod as the default, if the methods are
+ // the same we can skip the mountpoint check
+
+ // This allows to configure a different method for NFS mounts, since inotify
+ // cannot detect changes made by other machines. However as a default inotify
+ // is fine, since the most common case is a NFS-mounted home, where all changes
+ // are made locally. #177892.
+ KDirWatch::Method preferredMethod = m_preferredMethod;
+ if (m_nfsPreferredMethod != m_preferredMethod) {
+ if (KFileSystemType::fileSystemType(e->path) == KFileSystemType::Nfs) {
+ preferredMethod = m_nfsPreferredMethod;
+ }
+ }
+
+ // Try the appropriate preferred method from the config first
+ bool entryAdded = false;
+ switch (preferredMethod) {
+#if HAVE_FAM
+ case KDirWatch::FAM: entryAdded = useFAM(e); break;
+#endif
+#if HAVE_SYS_INOTIFY_H
+ case KDirWatch::INotify: entryAdded = useINotify(e); break;
+#endif
+#if HAVE_QFILESYSTEMWATCHER
+ case KDirWatch::QFSWatch: entryAdded = useQFSWatch(e); break;
+#endif
+ case KDirWatch::Stat: entryAdded = useStat(e); break;
+ }
+
+ // Failing that try in order INotify, FAM, QFSWatch, Stat
+ if (!entryAdded) {
+#if HAVE_SYS_INOTIFY_H
+ if (useINotify(e)) {
+ return;
+ }
+#endif
+#if HAVE_FAM
+ if (useFAM(e)) {
+ return;
+ }
+#endif
+#if HAVE_QFILESYSTEMWATCHER
+ if (useQFSWatch(e)) {
+ return;
+ }
+#endif
+ useStat(e);
+ }
+}
+
+void KDirWatchPrivate::removeWatch(Entry *e)
+{
+#if HAVE_FAM
+ if (e->m_mode == FAMMode) {
+ FAMCancelMonitor(&fc, &(e->fr));
+ qCDebug(KDIRWATCH).nospace() << "Cancelled FAM (Req " << FAMREQUEST_GETREQNUM(&(e->fr))
+ << ") for " << e->path;
+ }
+#endif
+#if HAVE_SYS_INOTIFY_H
+ if (e->m_mode == INotifyMode) {
+ m_inotify_wd_to_entry.remove(e->wd);
+ (void) inotify_rm_watch(m_inotify_fd, e->wd);
+ if (s_verboseDebug) {
+ qCDebug(KDIRWATCH).nospace() << "Cancelled INotify (fd " << m_inotify_fd << ", "
+ << e->wd << ") for " << e->path;
+ }
+ }
+#endif
+#if HAVE_QFILESYSTEMWATCHER
+ if (e->m_mode == QFSWatchMode && fsWatcher) {
+ if (s_verboseDebug) {
+ qCDebug(KDIRWATCH) << "fsWatcher->removePath" << e->path;
+ }
+ fsWatcher->removePath(e->path);
+ }
+#endif
+}
+
+void KDirWatchPrivate::removeEntry(KDirWatch *instance,
+ const QString &_path,
+ Entry *sub_entry)
+{
+ if (s_verboseDebug) {
+ qCDebug(KDIRWATCH) << "path=" << _path << "sub_entry:" << sub_entry;
+ }
+ Entry *e = entry(_path);
+ if (e) {
+ removeEntry(instance, e, sub_entry);
+ }
+}
+
+void KDirWatchPrivate::removeEntry(KDirWatch *instance,
+ Entry *e,
+ Entry *sub_entry)
+{
+ removeList.remove(e);
+
+ if (sub_entry) {
+ e->m_entries.removeAll(sub_entry);
+ } else {
+ e->removeClient(instance);
+ }
+
+ if (!e->m_clients.empty() || !e->m_entries.empty()) {
+ return;
+ }
+
+ if (delayRemove) {
+ removeList.insert(e);
+ // now e->isValid() is false
+ return;
+ }
+
+ if (e->m_status == Normal) {
+ removeWatch(e);
+ } else {
+ // Removed a NonExistent entry - we just remove it from the parent
+ if (e->isDir) {
+ removeEntry(nullptr, e->parentDirectory(), e);
+ } else {
+ removeEntry(nullptr, QFileInfo(e->path).absolutePath(), e);
+ }
+ }
+
+ if (e->m_mode == StatMode) {
+ statEntries--;
+ if (statEntries == 0) {
+ timer.stop(); // stop timer if lists are empty
+ qCDebug(KDIRWATCH) << " Stopped Polling Timer";
+ }
+ }
+
+ if (s_verboseDebug) {
+ qCDebug(KDIRWATCH).nospace() << "Removed " << (e->isDir ? "Dir " : "File ") << e->path
+ << " for " << (sub_entry ? sub_entry->path : QString())
+ << " [" << (instance ? instance->objectName() : QString()) << "]";
+ }
+ QString p = e->path; // take a copy, QMap::remove takes a reference and deletes, since e points into the map
+#if HAVE_SYS_INOTIFY_H
+ m_inotify_wd_to_entry.remove(e->wd);
+#endif
+ m_mapEntries.remove(p); // <e> not valid any more
+}
+
+/* Called from KDirWatch destructor:
+ * remove <instance> as client from all entries
+ */
+void KDirWatchPrivate::removeEntries(KDirWatch *instance)
+{
+ int minfreq = 3600000;
+
+ QStringList pathList;
+ // put all entries where instance is a client in list
+ EntryMap::Iterator it = m_mapEntries.begin();
+ for (; it != m_mapEntries.end(); ++it) {
+ Client *c = nullptr;
+ for (Client &client : (*it).m_clients) {
+ if (client.instance == instance) {
+ c = &client;
+ break;
+ }
+ }
+ if (c) {
+ c->count = 1; // forces deletion of instance as client
+ pathList.append((*it).path);
+ } else if ((*it).m_mode == StatMode && (*it).freq < minfreq) {
+ minfreq = (*it).freq;
+ }
+ }
+
+ Q_FOREACH (const QString &path, pathList) {
+ removeEntry(instance, path, nullptr);
+ }
+
+ if (minfreq > freq) {
+ // we can decrease the global polling frequency
+ freq = minfreq;
+ if (timer.isActive()) {
+ timer.start(freq);
+ }
+ qCDebug(KDIRWATCH) << "Poll Freq now" << freq << "msec";
+ }
+}
+
+// instance ==0: stop scanning for all instances
+bool KDirWatchPrivate::stopEntryScan(KDirWatch *instance, Entry *e)
+{
+ int stillWatching = 0;
+ for (Client &client : e->m_clients) {
+ if (!instance || instance == client.instance) {
+ client.watchingStopped = true;
+ } else if (!client.watchingStopped) {
+ stillWatching += client.count;
+ }
+ }
+
+ qCDebug(KDIRWATCH) << (instance ? instance->objectName() : QStringLiteral("all"))
+ << "stopped scanning" << e->path << "(now"
+ << stillWatching << "watchers)";
+
+ if (stillWatching == 0) {
+ // if nobody is interested, we don't watch, and we don't report
+ // changes that happened while not watching
+ e->m_ctime = invalid_ctime; // invalid
+
+ // Changing m_status like this would create wrong "created" events in stat mode.
+ // To really "stop watching" we would need to determine 'stillWatching==0' in scanEntry...
+ //e->m_status = NonExistent;
+ }
+ return true;
+}
+
+// instance ==0: start scanning for all instances
+bool KDirWatchPrivate::restartEntryScan(KDirWatch *instance, Entry *e,
+ bool notify)
+{
+ int wasWatching = 0, newWatching = 0;
+ for (Client &client : e->m_clients) {
+ if (!client.watchingStopped) {
+ wasWatching += client.count;
+ } else if (!instance || instance == client.instance) {
+ client.watchingStopped = false;
+ newWatching += client.count;
+ }
+ }
+ if (newWatching == 0) {
+ return false;
+ }
+
+ qCDebug(KDIRWATCH) << (instance ? instance->objectName() : QStringLiteral("all"))
+ << "restarted scanning" << e->path
+ << "(now" << wasWatching + newWatching << "watchers)";
+
+ // restart watching and emit pending events
+
+ int ev = NoChange;
+ if (wasWatching == 0) {
+ if (!notify) {
+ QT_STATBUF stat_buf;
+ bool exists = (QT_STAT(QFile::encodeName(e->path).constData(), &stat_buf) == 0);
+ if (exists) {
+ // ctime is the 'creation time' on windows, but with qMax
+ // we get the latest change of any kind, on any platform.
+ e->m_ctime = qMax(stat_buf.st_ctime, stat_buf.st_mtime);
+ e->m_status = Normal;
+ if (s_verboseDebug) {
+ qCDebug(KDIRWATCH) << "Setting status to Normal for" << e << e->path;
+ }
+ e->m_nlink = stat_buf.st_nlink;
+ e->m_ino = stat_buf.st_ino;
+
+ // Same as in scanEntry: ensure no subentry in parent dir
+ removeEntry(nullptr, e->parentDirectory(), e);
+ } else {
+ e->m_ctime = invalid_ctime;
+ e->m_status = NonExistent;
+ e->m_nlink = 0;
+ if (s_verboseDebug) {
+ qCDebug(KDIRWATCH) << "Setting status to NonExistent for" << e << e->path;
+ }
+ }
+ }
+ e->msecLeft = 0;
+ ev = scanEntry(e);
+ }
+ emitEvent(e, ev);
+
+ return true;
+}
+
+// instance ==0: stop scanning for all instances
+void KDirWatchPrivate::stopScan(KDirWatch *instance)
+{
+ EntryMap::Iterator it = m_mapEntries.begin();
+ for (; it != m_mapEntries.end(); ++it) {
+ stopEntryScan(instance, &(*it));
+ }
+}
+
+void KDirWatchPrivate::startScan(KDirWatch *instance,
+ bool notify, bool skippedToo)
+{
+ if (!notify) {
+ resetList(instance, skippedToo);
+ }
+
+ EntryMap::Iterator it = m_mapEntries.begin();
+ for (; it != m_mapEntries.end(); ++it) {
+ restartEntryScan(instance, &(*it), notify);
+ }
+
+ // timer should still be running when in polling mode
+}
+
+// clear all pending events, also from stopped
+void KDirWatchPrivate::resetList(KDirWatch *instance, bool skippedToo)
+{
+ Q_UNUSED(instance);
+ EntryMap::Iterator it = m_mapEntries.begin();
+ for (; it != m_mapEntries.end(); ++it) {
+
+ for (Client &client : (*it).m_clients) {
+ if (!client.watchingStopped || skippedToo) {
+ client.pending = NoChange;
+ }
+ }
+ }
+}
+
+// Return event happened on <e>
+//
+int KDirWatchPrivate::scanEntry(Entry *e)
+{
+ // Shouldn't happen: Ignore "unknown" notification method
+ if (e->m_mode == UnknownMode) {
+ return NoChange;
+ }
+
+ if (e->m_mode == FAMMode || e->m_mode == INotifyMode) {
+ // we know nothing has changed, no need to stat
+ if (!e->dirty) {
+ return NoChange;
+ }
+ e->dirty = false;
+ }
+
+ if (e->m_mode == StatMode) {
+ // only scan if timeout on entry timer happens;
+ // e.g. when using 500msec global timer, a entry
+ // with freq=5000 is only watched every 10th time
+
+ e->msecLeft -= freq;
+ if (e->msecLeft > 0) {
+ return NoChange;
+ }
+ e->msecLeft += e->freq;
+ }
+
+ QT_STATBUF stat_buf;
+ const bool exists = (QT_STAT(QFile::encodeName(e->path).constData(), &stat_buf) == 0);
+ if (exists) {
+
+ if (e->m_status == NonExistent) {
+ // ctime is the 'creation time' on windows, but with qMax
+ // we get the latest change of any kind, on any platform.
+ e->m_ctime = qMax(stat_buf.st_ctime, stat_buf.st_mtime);
+ e->m_status = Normal;
+ e->m_ino = stat_buf.st_ino;
+ if (s_verboseDebug) {
+ qCDebug(KDIRWATCH) << "Setting status to Normal for just created" << e << e->path;
+ }
+ // We need to make sure the entry isn't listed in its parent's subentries... (#222974, testMoveTo)
+ removeEntry(nullptr, e->parentDirectory(), e);
+
+ return Created;
+ }
+
+#if 1 // for debugging the if() below
+ if (s_verboseDebug) {
+ struct tm *tmp = localtime(&e->m_ctime);
+ char outstr[200];
+ strftime(outstr, sizeof(outstr), "%H:%M:%S", tmp);
+ qCDebug(KDIRWATCH) << e->path << "e->m_ctime=" << e->m_ctime << outstr
+ << "stat_buf.st_ctime=" << stat_buf.st_ctime
+ << "stat_buf.st_mtime=" << stat_buf.st_mtime
+ << "e->m_nlink=" << e->m_nlink
+ << "stat_buf.st_nlink=" << stat_buf.st_nlink
+ << "e->m_ino=" << e->m_ino
+ << "stat_buf.st_ino=" << stat_buf.st_ino;
+ }
+#endif
+
+ if ((e->m_ctime != invalid_ctime) &&
+ (qMax(stat_buf.st_ctime, stat_buf.st_mtime) != e->m_ctime ||
+ stat_buf.st_ino != e->m_ino ||
+ int(stat_buf.st_nlink) != int(e->m_nlink)
+#ifdef Q_OS_WIN
+ // on Windows, we trust QFSW to get it right, the ctime comparisons above
+ // fail for example when adding files to directories on Windows
+ // which doesn't change the mtime of the directory
+ || e->m_mode == QFSWatchMode
+#endif
+ )) {
+ e->m_ctime = qMax(stat_buf.st_ctime, stat_buf.st_mtime);
+ e->m_nlink = stat_buf.st_nlink;
+ if (e->m_ino != stat_buf.st_ino) {
+ // The file got deleted and recreated. We need to watch it again.
+ removeWatch(e);
+ addWatch(e);
+ e->m_ino = stat_buf.st_ino;
+ return (Deleted|Created);
+ } else {
+ return Changed;
+ }
+ }
+
+ return NoChange;
+ }
+
+ // dir/file doesn't exist
+
+ e->m_nlink = 0;
+ e->m_ino = 0;
+ e->m_status = NonExistent;
+
+ if (e->m_ctime == invalid_ctime) {
+ return NoChange;
+ }
+
+ e->m_ctime = invalid_ctime;
+ return Deleted;
+}
+
+/* Notify all interested KDirWatch instances about a given event on an entry
+ * and stored pending events. When watching is stopped, the event is
+ * added to the pending events.
+ */
+void KDirWatchPrivate::emitEvent(Entry *e, int event, const QString &fileName)
+{
+ QString path(e->path);
+ if (!fileName.isEmpty()) {
+ if (!QDir::isRelativePath(fileName)) {
+ path = fileName;
+ } else {
+#ifdef Q_OS_UNIX
+ path += QLatin1Char('/') + fileName;
+#elif defined(Q_OS_WIN)
+ //current drive is passed instead of /
+ path += QDir::currentPath().left(2) + QLatin1Char('/') + fileName;
+#endif
+ }
+ }
+
+ if (s_verboseDebug) {
+ qCDebug(KDIRWATCH) << event << path << e->m_clients.size() << "clients";
+ }
+
+ for (Client &c : e->m_clients) {
+ if (c.instance == nullptr || c.count == 0) {
+ continue;
+ }
+
+ if (c.watchingStopped) {
+ // Do not add event to a list of pending events, the docs say restartDirScan won't emit!
+#if 0
+ if (event == Changed) {
+ c.pending |= event;
+ } else if (event == Created || event == Deleted) {
+ c.pending = event;
+ }
+#endif
+ continue;
+ }
+ // not stopped
+ if (event == NoChange || event == Changed) {
+ event |= c.pending;
+ }
+ c.pending = NoChange;
+ if (event == NoChange) {
+ continue;
+ }
+
+ // Emit the signals delayed, to avoid unexpected re-entrance from the slots (#220153)
+
+ if (event & Deleted) {
+#if QT_VERSION < QT_VERSION_CHECK(5, 10, 0)
+ QMetaObject::invokeMethod(c.instance, "setDeleted", Qt::QueuedConnection, Q_ARG(QString, path));
+#else
+ QMetaObject::invokeMethod(c.instance, [c, path]() { c.instance->setDeleted(path); }, Qt::QueuedConnection);
+#endif
+ }
+
+ if (event & Created) {
+#if QT_VERSION < QT_VERSION_CHECK(5, 10, 0)
+ QMetaObject::invokeMethod(c.instance, "setCreated", Qt::QueuedConnection, Q_ARG(QString, path));
+#else
+ QMetaObject::invokeMethod(c.instance, [c, path]() { c.instance->setCreated(path); }, Qt::QueuedConnection);
+#endif
+ // possible emit Change event after creation
+ }
+
+ if (event & Changed) {
+#if QT_VERSION < QT_VERSION_CHECK(5, 10, 0)
+ QMetaObject::invokeMethod(c.instance, "setDirty", Qt::QueuedConnection, Q_ARG(QString, path));
+#else
+ QMetaObject::invokeMethod(c.instance, [c, path]() { c.instance->setDirty(path); }, Qt::QueuedConnection);
+#endif
+ }
+ }
+}
+
+// Remove entries which were marked to be removed
+void KDirWatchPrivate::slotRemoveDelayed()
+{
+ delayRemove = false;
+ // Removing an entry could also take care of removing its parent
+ // (e.g. in FAM or inotify mode), which would remove other entries in removeList,
+ // so don't use Q_FOREACH or iterators here...
+ while (!removeList.isEmpty()) {
+ Entry *entry = *removeList.begin();
+ removeEntry(nullptr, entry, nullptr); // this will remove entry from removeList
+ }
+}
+
+/* Scan all entries to be watched for changes. This is done regularly
+ * when polling. FAM and inotify use a single-shot timer to call this slot delayed.
+ */
+void KDirWatchPrivate::slotRescan()
+{
+ if (s_verboseDebug) {
+ qCDebug(KDIRWATCH);
+ }
+
+ EntryMap::Iterator it;
+
+ // People can do very long things in the slot connected to dirty(),
+ // like showing a message box. We don't want to keep polling during
+ // that time, otherwise the value of 'delayRemove' will be reset.
+ // ### TODO: now the emitEvent delays emission, this can be cleaned up
+ bool timerRunning = timer.isActive();
+ if (timerRunning) {
+ timer.stop();
+ }
+
+ // We delay deletions of entries this way.
+ // removeDir(), when called in slotDirty(), can cause a crash otherwise
+ // ### TODO: now the emitEvent delays emission, this can be cleaned up
+ delayRemove = true;
+
+ if (rescan_all) {
+ // mark all as dirty
+ it = m_mapEntries.begin();
+ for (; it != m_mapEntries.end(); ++it) {
+ (*it).dirty = true;
+ }
+ rescan_all = false;
+ } else {
+ // propagate dirty flag to dependent entries (e.g. file watches)
+ it = m_mapEntries.begin();
+ for (; it != m_mapEntries.end(); ++it)
+ if (((*it).m_mode == INotifyMode || (*it).m_mode == QFSWatchMode) && (*it).dirty) {
+ (*it).propagate_dirty();
+ }
+ }
+
+#if HAVE_SYS_INOTIFY_H
+ QList<Entry *> cList;
+#endif
+
+ it = m_mapEntries.begin();
+ for (; it != m_mapEntries.end(); ++it) {
+ // we don't check invalid entries (i.e. remove delayed)
+ Entry *entry = &(*it);
+ if (!entry->isValid()) {
+ continue;
+ }
+
+ const int ev = scanEntry(entry);
+ if (s_verboseDebug) {
+ qCDebug(KDIRWATCH) << "scanEntry for" << entry->path << "says" << ev;
+ }
+
+ switch (entry->m_mode) {
+#if HAVE_SYS_INOTIFY_H
+ case INotifyMode:
+ if (ev == Deleted) {
+ if (s_verboseDebug) {
+ qCDebug(KDIRWATCH) << "scanEntry says" << entry->path << "was deleted";
+ }
+ addEntry(nullptr, entry->parentDirectory(), entry, true);
+ } else if (ev == Created) {
+ if (s_verboseDebug) {
+ qCDebug(KDIRWATCH) << "scanEntry says" << entry->path << "was created. wd=" << entry->wd;
+ }
+ if (entry->wd < 0) {
+ cList.append(entry);
+ addWatch(entry);
+ }
+ }
+ break;
+#endif
+ case FAMMode:
+ case QFSWatchMode:
+ if (ev == Created) {
+ addWatch(entry);
+ }
+ break;
+ default:
+ // dunno about StatMode...
+ break;
+ }
+
+#if HAVE_SYS_INOTIFY_H
+ if (entry->isDir) {
+ // Report and clear the list of files that have changed in this directory.
+ // Remove duplicates by changing to set and back again:
+ // we don't really care about preserving the order of the
+ // original changes.
+ QStringList pendingFileChanges = entry->m_pendingFileChanges;
+ pendingFileChanges.removeDuplicates();
+ Q_FOREACH (const QString &changedFilename, pendingFileChanges) {
+ if (s_verboseDebug) {
+ qCDebug(KDIRWATCH) << "processing pending file change for" << changedFilename;
+ }
+ emitEvent(entry, Changed, changedFilename);
+ }
+ entry->m_pendingFileChanges.clear();
+ }
+#endif
+
+ if (ev != NoChange) {
+ emitEvent(entry, ev);
+ }
+ }
+
+ if (timerRunning) {
+ timer.start(freq);
+ }
+
+#if HAVE_SYS_INOTIFY_H
+ // Remove watch of parent of new created directories
+ Q_FOREACH (Entry *e, cList) {
+ removeEntry(nullptr, e->parentDirectory(), e);
+ }
+#endif
+
+ QTimer::singleShot(0, this, SLOT(slotRemoveDelayed()));
+}
+
+bool KDirWatchPrivate::isNoisyFile(const char *filename)
+{
+ // $HOME/.X.err grows with debug output, so don't notify change
+ if (*filename == '.') {
+ if (strncmp(filename, ".X.err", 6) == 0) {
+ return true;
+ }
+ if (strncmp(filename, ".xsession-errors", 16) == 0) {
+ return true;
+ }
+ // fontconfig updates the cache on every KDE app start
+ // (inclusive kio_thumbnail slaves)
+ if (strncmp(filename, ".fonts.cache", 12) == 0) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+#if HAVE_FAM
+void KDirWatchPrivate::famEventReceived()
+{
+ static FAMEvent fe;
+
+ delayRemove = true;
+
+ //qCDebug(KDIRWATCH) << "Fam event received";
+
+ while (use_fam && FAMPending(&fc)) {
+ if (FAMNextEvent(&fc, &fe) == -1) {
+ qCWarning(KCOREADDONS_DEBUG) << "FAM connection problem, switching to polling.";
+ use_fam = false;
+ delete sn; sn = nullptr;
+
+ // Replace all FAMMode entries with INotify/Stat
+ EntryMap::Iterator it = m_mapEntries.begin();
+ for (; it != m_mapEntries.end(); ++it)
+ if ((*it).m_mode == FAMMode && !(*it).m_clients.empty()) {
+ Entry *e = &(*it);
+ addWatch(e);
+ }
+ } else {
+ checkFAMEvent(&fe);
+ }
+ }
+
+ QTimer::singleShot(0, this, SLOT(slotRemoveDelayed()));
+}
+
+void KDirWatchPrivate::checkFAMEvent(FAMEvent *fe)
+{
+ //qCDebug(KDIRWATCH);
+
+ Entry *e = nullptr;
+ EntryMap::Iterator it = m_mapEntries.begin();
+ for (; it != m_mapEntries.end(); ++it)
+ if (FAMREQUEST_GETREQNUM(&((*it).fr)) ==
+ FAMREQUEST_GETREQNUM(&(fe->fr))) {
+ e = &(*it);
+ break;
+ }
+
+ // Don't be too verbose ;-)
+ if ((fe->code == FAMExists) ||
+ (fe->code == FAMEndExist) ||
+ (fe->code == FAMAcknowledge)) {
+ if (e) {
+ e->m_famReportedSeen = true;
+ }
+ return;
+ }
+
+ if (isNoisyFile(fe->filename)) {
+ return;
+ }
+
+ // Entry *e = static_cast<Entry*>(fe->userdata);
+
+ if (s_verboseDebug) { // don't enable this except when debugging, see #88538
+ qCDebug(KDIRWATCH) << "Processing FAM event ("
+ << ((fe->code == FAMChanged) ? "FAMChanged" :
+ (fe->code == FAMDeleted) ? "FAMDeleted" :
+ (fe->code == FAMStartExecuting) ? "FAMStartExecuting" :
+ (fe->code == FAMStopExecuting) ? "FAMStopExecuting" :
+ (fe->code == FAMCreated) ? "FAMCreated" :
+ (fe->code == FAMMoved) ? "FAMMoved" :
+ (fe->code == FAMAcknowledge) ? "FAMAcknowledge" :
+ (fe->code == FAMExists) ? "FAMExists" :
+ (fe->code == FAMEndExist) ? "FAMEndExist" : "Unknown Code")
+ << ", " << fe->filename
+ << ", Req " << FAMREQUEST_GETREQNUM(&(fe->fr)) << ") e=" << e;
+ }
+
+ if (!e) {
+ // this happens e.g. for FAMAcknowledge after deleting a dir...
+ // qCDebug(KDIRWATCH) << "No entry for FAM event ?!";
+ return;
+ }
+
+ if (e->m_status == NonExistent) {
+ qCDebug(KDIRWATCH) << "FAM event for nonExistent entry " << e->path;
+ return;
+ }
+
+ // Delayed handling. This rechecks changes with own stat calls.
+ e->dirty = true;
+ if (!rescan_timer.isActive()) {
+ rescan_timer.start(m_PollInterval); // singleshot
+ }
+
+ // needed FAM control actions on FAM events
+ switch (fe->code) {
+ case FAMDeleted:
+ // fe->filename is an absolute path when a watched file-or-dir is deleted
+ if (!QDir::isRelativePath(QFile::decodeName(fe->filename))) {
+ FAMCancelMonitor(&fc, &(e->fr)); // needed ?
+ qCDebug(KDIRWATCH) << "Cancelled FAMReq"
+ << FAMREQUEST_GETREQNUM(&(e->fr))
+ << "for" << e->path;
+ e->m_status = NonExistent;
+ e->m_ctime = invalid_ctime;
+ emitEvent(e, Deleted, e->path);
+ // If the parent dir was already watched, tell it something changed
+ Entry *parentEntry = entry(e->parentDirectory());
+ if (parentEntry) {
+ parentEntry->dirty = true;
+ }
+ // Add entry to parent dir to notice if the entry gets recreated
+ addEntry(nullptr, e->parentDirectory(), e, true /*isDir*/);
+ } else {
+ // A file in this directory has been removed, and wasn't explicitly watched.
+ // We could still inform clients, like inotify does? But stat can't.
+ // For now we just marked e dirty and slotRescan will emit the dir as dirty.
+ //qCDebug(KDIRWATCH) << "Got FAMDeleted for" << QFile::decodeName(fe->filename) << "in" << e->path << ". Absolute path -> NOOP!";
+ }
+ break;
+
+ case FAMCreated: {
+ // check for creation of a directory we have to watch
+ QString tpath(e->path + QLatin1Char('/') + QFile::decodeName(fe->filename));
+
+ // This code is very similar to the one in inotifyEventReceived...
+ Entry *sub_entry = e->findSubEntry(tpath);
+ if (sub_entry /*&& sub_entry->isDir*/) {
+ // We were waiting for this new file/dir to be created. We don't actually
+ // emit an event here, as the rescan_timer will re-detect the creation and
+ // do the signal emission there.
+ sub_entry->dirty = true;
+ rescan_timer.start(0); // process this asap, to start watching that dir
+ } else if (e->isDir && !e->m_clients.empty()) {
+ bool isDir = false;
+ const QList<const Client *> clients = e->clientsForFileOrDir(tpath, &isDir);
+ Q_FOREACH (const Client *client, clients) {
+ addEntry(client->instance, tpath, nullptr, isDir,
+ isDir ? client->m_watchModes : KDirWatch::WatchDirOnly);
+ }
+
+ if (!clients.isEmpty()) {
+ emitEvent(e, Created, tpath);
+
+ qCDebug(KDIRWATCH).nospace() << clients.count() << " instance(s) monitoring the new "
+ << (isDir ? "dir " : "file ") << tpath;
+ }
+ }
+ }
+ break;
+ default:
+ break;
+ }
+}
+#else
+void KDirWatchPrivate::famEventReceived()
+{
+ qCWarning(KCOREADDONS_DEBUG) << "Fam event received but FAM is not supported";
+}
+#endif
+
+void KDirWatchPrivate::statistics()
+{
+ EntryMap::Iterator it;
+
+ qCDebug(KDIRWATCH) << "Entries watched:";
+ if (m_mapEntries.count() == 0) {
+ qCDebug(KDIRWATCH) << " None.";
+ } else {
+ it = m_mapEntries.begin();
+ for (; it != m_mapEntries.end(); ++it) {
+ Entry *e = &(*it);
+ qCDebug(KDIRWATCH) << " " << *e;
+
+ for (const Client &c : e->m_clients) {
+ QByteArray pending;
+ if (c.watchingStopped) {
+ if (c.pending & Deleted) {
+ pending += "deleted ";
+ }
+ if (c.pending & Created) {
+ pending += "created ";
+ }
+ if (c.pending & Changed) {
+ pending += "changed ";
+ }
+ if (!pending.isEmpty()) {
+ pending = " (pending: " + pending + ')';
+ }
+ pending = ", stopped" + pending;
+ }
+ qCDebug(KDIRWATCH) << " by " << c.instance->objectName()
+ << " (" << c.count << " times)" << pending;
+ }
+ if (!e->m_entries.isEmpty()) {
+ qCDebug(KDIRWATCH) << " dependent entries:";
+ Q_FOREACH (Entry *d, e->m_entries) {
+ qCDebug(KDIRWATCH) << " " << d << d->path << (d->m_status == NonExistent ? "NonExistent" : "EXISTS!!! ERROR!");
+ if (s_verboseDebug) {
+ Q_ASSERT(d->m_status == NonExistent); // it doesn't belong here otherwise
+ }
+ }
+ }
+ }
+ }
+}
+
+#if HAVE_QFILESYSTEMWATCHER
+// Slot for QFileSystemWatcher
+void KDirWatchPrivate::fswEventReceived(const QString &path)
+{
+ if (s_verboseDebug) {
+ qCDebug(KDIRWATCH) << path;
+ }
+ EntryMap::Iterator it = m_mapEntries.find(path);
+ if (it != m_mapEntries.end()) {
+ Entry *e = &(*it);
+ e->dirty = true;
+ const int ev = scanEntry(e);
+ if (s_verboseDebug) {
+ qCDebug(KDIRWATCH) << "scanEntry for" << e->path << "says" << ev;
+ }
+ if (ev != NoChange) {
+ emitEvent(e, ev);
+ }
+ if (ev == Deleted) {
+ if (e->isDir) {
+ addEntry(nullptr, e->parentDirectory(), e, true);
+ } else {
+ addEntry(nullptr, QFileInfo(e->path).absolutePath(), e, true);
+ }
+ } else if (ev == Created) {
+ // We were waiting for it to appear; now watch it
+ addWatch(e);
+ } else if (e->isDir) {
+ // Check if any file or dir was created under this directory, that we were waiting for
+ Q_FOREACH (Entry *sub_entry, e->m_entries) {
+ fswEventReceived(sub_entry->path); // recurse, to call scanEntry and see if something changed
+ }
+ } else {
+ /* Even though QFileSystemWatcher only reported the file as modified, it is possible that the file
+ * was in fact just deleted and then immediately recreated. If the file was deleted, QFileSystemWatcher
+ * will delete the watch, and will ignore the file, even after it is recreated. Since it is impossible
+ * to reliably detect this case, always re-request the watch on a dirty signal, to avoid losing the
+ * underlying OS monitor.
+ */
+ fsWatcher->addPath(e->path);
+ }
+ }
+}
+#else
+void KDirWatchPrivate::fswEventReceived(const QString &path)
+{
+ Q_UNUSED(path);
+ qCWarning(KCOREADDONS_DEBUG) << "QFileSystemWatcher event received but QFileSystemWatcher is not supported";
+}
+#endif // HAVE_QFILESYSTEMWATCHER
+
+//
+// Class KDirWatch
+//
+
+Q_GLOBAL_STATIC(KDirWatch, s_pKDirWatchSelf)
+KDirWatch *KDirWatch::self()
+{
+ return s_pKDirWatchSelf();
+}
+
+// <steve> is this used anywhere?
+// <dfaure> yes, see kio/src/core/kcoredirlister_p.h:328
+bool KDirWatch::exists()
+{
+ return s_pKDirWatchSelf.exists() && dwp_self.hasLocalData();
+}
+
+static void postRoutine_KDirWatch()
+{
+ if (s_pKDirWatchSelf.exists()) {
+ s_pKDirWatchSelf()->deleteQFSWatcher();
+ }
+}
+
+KDirWatch::KDirWatch(QObject *parent)
+ : QObject(parent), d(createPrivate())
+{
+ static QBasicAtomicInt nameCounter = Q_BASIC_ATOMIC_INITIALIZER(1);
+ const int counter = nameCounter.fetchAndAddRelaxed(1); // returns the old value
+ setObjectName(QStringLiteral("KDirWatch-%1").arg(counter));
+
+ if (counter == 1) { // very first KDirWatch instance
+ // Must delete QFileSystemWatcher before qApp is gone - bug 261541
+ qAddPostRoutine(postRoutine_KDirWatch);
+ }
+}
+
+KDirWatch::~KDirWatch()
+{
+ if (d && dwp_self.hasLocalData()) { // skip this after app destruction
+ d->removeEntries(this);
+ }
+}
+
+void KDirWatch::addDir(const QString &_path, WatchModes watchModes)
+{
+ if (d) {
+ d->addEntry(this, _path, nullptr, true, watchModes);
+ }
+}
+
+void KDirWatch::addFile(const QString &_path)
+{
+ if (!d) {
+ return;
+ }
+
+ d->addEntry(this, _path, nullptr, false);
+}
+
+QDateTime KDirWatch::ctime(const QString &_path) const
+{
+ KDirWatchPrivate::Entry *e = d->entry(_path);
+
+ if (!e) {
+ return QDateTime();
+ }
+
+ return QDateTime::fromTime_t(e->m_ctime);
+}
+
+void KDirWatch::removeDir(const QString &_path)
+{
+ if (d) {
+ d->removeEntry(this, _path, nullptr);
+ }
+}
+
+void KDirWatch::removeFile(const QString &_path)
+{
+ if (d) {
+ d->removeEntry(this, _path, nullptr);
+ }
+}
+
+bool KDirWatch::stopDirScan(const QString &_path)
+{
+ if (d) {
+ KDirWatchPrivate::Entry *e = d->entry(_path);
+ if (e && e->isDir) {
+ return d->stopEntryScan(this, e);
+ }
+ }
+ return false;
+}
+
+bool KDirWatch::restartDirScan(const QString &_path)
+{
+ if (d) {
+ KDirWatchPrivate::Entry *e = d->entry(_path);
+ if (e && e->isDir)
+ // restart without notifying pending events
+ {
+ return d->restartEntryScan(this, e, false);
+ }
+ }
+ return false;
+}
+
+void KDirWatch::stopScan()
+{
+ if (d) {
+ d->stopScan(this);
+ d->_isStopped = true;
+ }
+}
+
+bool KDirWatch::isStopped()
+{
+ return d->_isStopped;
+}
+
+void KDirWatch::startScan(bool notify, bool skippedToo)
+{
+ if (d) {
+ d->_isStopped = false;
+ d->startScan(this, notify, skippedToo);
+ }
+}
+
+bool KDirWatch::contains(const QString &_path) const
+{
+ KDirWatchPrivate::Entry *e = d->entry(_path);
+ if (!e) {
+ return false;
+ }
+
+ for (const KDirWatchPrivate::Client &client : e->m_clients) {
+ if (client.instance == this) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+void KDirWatch::deleteQFSWatcher()
+{
+ delete d->fsWatcher;
+ d->fsWatcher = nullptr;
+ d = nullptr;
+}
+
+void KDirWatch::statistics()
+{
+ if (!dwp_self.hasLocalData()) {
+ qCDebug(KDIRWATCH) << "KDirWatch not used";
+ return;
+ }
+ dwp_self.localData()->statistics();
+}
+
+void KDirWatch::setCreated(const QString &_file)
+{
+ qCDebug(KDIRWATCH) << objectName() << "emitting created" << _file;
+ emit created(_file);
+}
+
+void KDirWatch::setDirty(const QString &_file)
+{
+ //qCDebug(KDIRWATCH) << objectName() << "emitting dirty" << _file;
+ emit dirty(_file);
+}
+
+void KDirWatch::setDeleted(const QString &_file)
+{
+ qCDebug(KDIRWATCH) << objectName() << "emitting deleted" << _file;
+ emit deleted(_file);
+}
+
+KDirWatch::Method KDirWatch::internalMethod() const
+{
+ // This reproduces the logic in KDirWatchPrivate::addWatch
+ switch (d->m_preferredMethod) {
+#if HAVE_FAM
+ case KDirWatch::FAM: if (d->use_fam) {
+ return KDirWatch::FAM;
+ }
+ break;
+#endif
+#if HAVE_SYS_INOTIFY_H
+ case KDirWatch::INotify: if (d->supports_inotify) {
+ return KDirWatch::INotify;
+ }
+ break;
+#endif
+#if HAVE_QFILESYSTEMWATCHER
+ case KDirWatch::QFSWatch: return KDirWatch::QFSWatch;
+#endif
+ case KDirWatch::Stat: return KDirWatch::Stat;
+ }
+
+#if HAVE_SYS_INOTIFY_H
+ if (d->supports_inotify) {
+ return KDirWatch::INotify;
+ }
+#endif
+#if HAVE_FAM
+ if (d->use_fam) {
+ return KDirWatch::FAM;
+ }
+#endif
+#if HAVE_QFILESYSTEMWATCHER
+ return KDirWatch::QFSWatch;
+#else
+ return KDirWatch::Stat;
+#endif
+}
+
+#include "moc_kdirwatch.cpp"
+#include "moc_kdirwatch_p.cpp"
+
+//sven
--- /dev/null
+/* This file is part of the KDE libraries
+ Copyright (C) 1998 Sven Radej <sven@lisa.exp.univie.ac.at>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+#ifndef _KDIRWATCH_H
+#define _KDIRWATCH_H
+
+#include <QDateTime>
+#include <QObject>
+#include <QString>
+
+#include <kcoreaddons_export.h>
+
+class KDirWatchPrivate;
+
+/**
+ * @class KDirWatch kdirwatch.h KDirWatch
+ *
+ * @short Class for watching directory and file changes.
+ *
+ * Watch directories and files for changes.
+ * The watched directories or files don't have to exist yet.
+ *
+ * When a watched directory is changed, i.e. when files therein are
+ * created or deleted, KDirWatch will emit the signal dirty().
+ *
+ * When a watched, but previously not existing directory gets created,
+ * KDirWatch will emit the signal created().
+ *
+ * When a watched directory gets deleted, KDirWatch will emit the
+ * signal deleted(). The directory is still watched for new
+ * creation.
+ *
+ * When a watched file is changed, i.e. attributes changed or written
+ * to, KDirWatch will emit the signal dirty().
+ *
+ * Scanning of particular directories or files can be stopped temporarily
+ * and restarted. The whole class can be stopped and restarted.
+ * Directories and files can be added/removed from the list in any state.
+ *
+ * The implementation uses the INOTIFY functionality on LINUX.
+ * Otherwise the FAM service is used, when available.
+ * As a last resort, a regular polling for change of modification times
+ * is done; the polling interval is a global config option:
+ * DirWatch/PollInterval and DirWatch/NFSPollInterval for NFS mounted
+ * directories.
+ * The choice of implementation can be adjusted by the user, with the key
+ * [DirWatch] PreferredMethod={Fam|Stat|QFSWatch|inotify}
+ *
+ * @see self()
+ * @author Sven Radej (in 1998)
+ */
+class KCOREADDONS_EXPORT KDirWatch : public QObject
+{
+ Q_OBJECT
+
+public:
+
+ /**
+ * Available watch modes for directory monitoring
+ **/
+ enum WatchMode {
+ WatchDirOnly = 0, ///< Watch just the specified directory
+ WatchFiles = 0x01, ///< Watch also all files contained by the directory
+ WatchSubDirs = 0x02 ///< Watch also all the subdirs contained by the directory
+ };
+ Q_DECLARE_FLAGS(WatchModes, WatchMode)
+
+ /**
+ * Constructor.
+ *
+ * Scanning begins immediately when a dir/file watch
+ * is added.
+ * @param parent the parent of the QObject (or @c nullptr for parent-less KDataTools)
+ */
+ explicit KDirWatch(QObject *parent = nullptr);
+
+ /**
+ * Destructor.
+ *
+ * Stops scanning and cleans up.
+ */
+ ~KDirWatch();
+
+ /**
+ * Adds a directory to be watched.
+ *
+ * The directory does not have to exist. When @p watchModes is set to
+ * WatchDirOnly (the default), the signals dirty(), created(), deleted()
+ * can be emitted, all for the watched directory.
+ * When @p watchModes is set to WatchFiles, all files in the watched
+ * directory are watched for changes, too. Thus, the signals dirty(),
+ * created(), deleted() can be emitted.
+ * When @p watchModes is set to WatchSubDirs, all subdirs are watched using
+ * the same flags specified in @p watchModes (symlinks aren't followed).
+ * If the @p path points to a symlink to a directory, the target directory
+ * is watched instead. If you want to watch the link, use @p addFile().
+ *
+ * @param path the path to watch
+ * @param watchModes watch modes
+ *
+ * @sa KDirWatch::WatchMode
+ */
+ void addDir(const QString &path, WatchModes watchModes = WatchDirOnly);
+
+ /**
+ * Adds a file to be watched.
+ * If it's a symlink to a directory, it watches the symlink itself.
+ * @param file the file to watch
+ */
+ void addFile(const QString &file);
+
+ /**
+ * Returns the time the directory/file was last changed.
+ * @param path the file to check
+ * @return the date of the last modification
+ */
+ QDateTime ctime(const QString &path) const;
+
+ /**
+ * Removes a directory from the list of scanned directories.
+ *
+ * If specified path is not in the list this does nothing.
+ * @param path the path of the dir to be removed from the list
+ */
+ void removeDir(const QString &path);
+
+ /**
+ * Removes a file from the list of watched files.
+ *
+ * If specified path is not in the list this does nothing.
+ * @param file the file to be removed from the list
+ */
+ void removeFile(const QString &file);
+
+ /**
+ * Stops scanning the specified path.
+ *
+ * The @p path is not deleted from the internal list, it is just skipped.
+ * Call this function when you perform an huge operation
+ * on this directory (copy/move big files or many files). When finished,
+ * call restartDirScan(path).
+ *
+ * @param path the path to skip
+ * @return true if the @p path is being watched, otherwise false
+ * @see restartDirScan()
+ */
+ bool stopDirScan(const QString &path);
+
+ /**
+ * Restarts scanning for specified path.
+ *
+ * It doesn't notify about the changes (by emitting a signal).
+ * The ctime value is reset.
+ *
+ * Call it when you are finished with big operations on that path,
+ * @em and when @em you have refreshed that path.
+ *
+ * @param path the path to restart scanning
+ * @return true if the @p path is being watched, otherwise false
+ * @see stopDirScan()
+ */
+ bool restartDirScan(const QString &path);
+
+ /**
+ * Starts scanning of all dirs in list.
+ *
+ * @param notify If true, all changed directories (since
+ * stopScan() call) will be notified for refresh. If notify is
+ * false, all ctimes will be reset (except those who are stopped,
+ * but only if @p skippedToo is false) and changed dirs won't be
+ * notified. You can start scanning even if the list is
+ * empty. First call should be called with @p false or else all
+ * directories
+ * in list will be notified.
+ * @param skippedToo if true, the skipped directories (scanning of which was
+ * stopped with stopDirScan() ) will be reset and notified
+ * for change. Otherwise, stopped directories will continue to be
+ * unnotified.
+ */
+ void startScan(bool notify = false, bool skippedToo = false);
+
+ /**
+ * Stops scanning of all directories in internal list.
+ *
+ * The timer is stopped, but the list is not cleared.
+ */
+ void stopScan();
+
+ /**
+ * Is scanning stopped?
+ * After creation of a KDirWatch instance, this is false.
+ * @return true when scanning stopped
+ */
+ bool isStopped();
+
+ /**
+ * Check if a directory is being watched by this KDirWatch instance
+ * @param path the directory to check
+ * @return true if the directory is being watched
+ */
+ bool contains(const QString &path) const;
+
+ void deleteQFSWatcher(); // KF6 TODO: remove from public API
+
+ /**
+ * Dump statistic information about the KDirWatch::self() instance.
+ * This checks for consistency, too.
+ */
+ static void statistics(); // TODO implement a QDebug operator for KDirWatch instead.
+
+ enum Method { FAM, INotify, Stat, QFSWatch };
+ /**
+ * Returns the preferred internal method to
+ * watch for changes.
+ */
+ Method internalMethod() const;
+
+ /**
+ * The KDirWatch instance usually globally used in an application.
+ * It is automatically deleted when the application exits.
+ *
+ * However, you can create an arbitrary number of KDirWatch instances
+ * aside from this one - for those you have to take care of memory management.
+ *
+ * This function returns an instance of KDirWatch. If there is none, it
+ * will be created.
+ *
+ * @return a KDirWatch instance
+ */
+ static KDirWatch *self();
+ /**
+ * Returns true if there is an instance of KDirWatch.
+ * @return true if there is an instance of KDirWatch.
+ * @see KDirWatch::self()
+ */
+ static bool exists();
+
+public Q_SLOTS:
+
+ /**
+ * Emits created().
+ * @param path the path of the file or directory
+ */
+ void setCreated(const QString &path);
+
+ /**
+ * Emits dirty().
+ * @param path the path of the file or directory
+ */
+ void setDirty(const QString &path);
+
+ /**
+ * Emits deleted().
+ * @param path the path of the file or directory
+ */
+ void setDeleted(const QString &path);
+
+Q_SIGNALS:
+
+ /**
+ * Emitted when a watched object is changed.
+ * For a directory this signal is emitted when files
+ * therein are created or deleted.
+ * For a file this signal is emitted when its size or attributes change.
+ *
+ * When you watch a directory, changes in the size or attributes of
+ * contained files may or may not trigger this signal to be emitted
+ * depending on which backend is used by KDirWatch.
+ *
+ * The new ctime is set before the signal is emitted.
+ * @param path the path of the file or directory
+ */
+ void dirty(const QString &path);
+
+ /**
+ * Emitted when a file or directory (being watched explicitly) is created.
+ * This is not emitted when creating a file is created in a watched directory.
+ * @param path the path of the file or directory
+ */
+ void created(const QString &path);
+
+ /**
+ * Emitted when a file or directory is deleted.
+ *
+ * The object is still watched for new creation.
+ * @param path the path of the file or directory
+ */
+ void deleted(const QString &path);
+
+private:
+ KDirWatchPrivate *d;
+};
+
+Q_DECLARE_OPERATORS_FOR_FLAGS(KDirWatch::WatchModes)
+
+#endif
+
--- /dev/null
+/* Private Header for class of KDirWatchPrivate
+ *
+ * this separate header file is needed for MOC processing
+ * because KDirWatchPrivate has signals and slots
+ *
+ * This file is part of the KDE libraries
+ * Copyright (C) 1998 Sven Radej <sven@lisa.exp.univie.ac.at>
+ * Copyright (C) 2006 Dirk Mueller <mueller@kde.org>
+ * Copyright (C) 2007 Flavio Castelli <flavio.castelli@gmail.com>
+ * Copyright (C) 2008 Jarosław Staniek <staniek@kde.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License version 2 as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef KDIRWATCH_P_H
+#define KDIRWATCH_P_H
+
+#include <io/config-kdirwatch.h>
+#include "kdirwatch.h"
+
+#ifndef QT_NO_FILESYSTEMWATCHER
+#define HAVE_QFILESYSTEMWATCHER 1
+#else
+#define HAVE_QFILESYSTEMWATCHER 0
+#endif
+
+#include <QList>
+#include <QSet>
+#include <QMap>
+#include <QObject>
+#include <QString>
+#include <QTimer>
+class QSocketNotifier;
+
+#if HAVE_FAM
+#include <limits.h>
+#include <fam.h>
+#endif
+
+#include <sys/types.h> // time_t, ino_t
+#include <ctime>
+
+#define invalid_ctime (static_cast<time_t>(-1))
+
+#if HAVE_QFILESYSTEMWATCHER
+#include <QFileSystemWatcher>
+#endif // HAVE_QFILESYSTEMWATCHER
+
+/* KDirWatchPrivate is a singleton and does the watching
+ * for every KDirWatch instance in the application.
+ */
+class KDirWatchPrivate : public QObject
+{
+ Q_OBJECT
+public:
+
+ enum entryStatus { Normal = 0, NonExistent };
+ enum entryMode { UnknownMode = 0, StatMode, INotifyMode, FAMMode, QFSWatchMode };
+ enum { NoChange = 0, Changed = 1, Created = 2, Deleted = 4 };
+
+ struct Client {
+ Client(KDirWatch *inst, KDirWatch::WatchModes watchModes)
+ : instance(inst),
+ count(1),
+ watchingStopped(inst->isStopped()),
+ pending(NoChange),
+ m_watchModes(watchModes)
+ {}
+
+ // The compiler needs a copy ctor for Client when Entry is inserted into m_mapEntries
+ // (even though the vector of clients is empty at that point, so no performance penalty there)
+ //Client(const Client &) = delete;
+ //Client &operator=(const Client &) = delete;
+ //Client(Client &&) = default;
+ //Client &operator=(Client &&) = default;
+
+ KDirWatch *instance;
+ int count;
+ // did the instance stop watching
+ bool watchingStopped;
+ // events blocked when stopped
+ int pending;
+ KDirWatch::WatchModes m_watchModes;
+ };
+
+ class Entry
+ {
+ public:
+ ~Entry();
+ // instances interested in events
+ std::vector<Client> m_clients;
+ // nonexistent entries of this directory
+ QList<Entry *> m_entries;
+ QString path;
+
+ // the last observed modification time
+ time_t m_ctime;
+ // last observed inode
+ ino_t m_ino;
+ // the last observed link count
+ int m_nlink;
+ entryStatus m_status;
+ entryMode m_mode;
+ int msecLeft, freq;
+ bool isDir;
+
+ QString parentDirectory() const;
+ void addClient(KDirWatch *, KDirWatch::WatchModes);
+ void removeClient(KDirWatch *);
+ int clientCount() const;
+ bool isValid()
+ {
+ return !m_clients.empty() || !m_entries.empty();
+ }
+
+ Entry *findSubEntry(const QString &path) const
+ {
+ Q_FOREACH (Entry *sub_entry, m_entries) {
+ if (sub_entry->path == path) {
+ return sub_entry;
+ }
+ }
+ return nullptr;
+ }
+
+ bool dirty;
+ void propagate_dirty();
+
+ QList<const Client *> clientsForFileOrDir(const QString &tpath, bool *isDir) const;
+ QList<const Client *> inotifyClientsForFileOrDir(bool isDir) const;
+
+#if HAVE_FAM
+ FAMRequest fr;
+ bool m_famReportedSeen;
+#endif
+
+#if HAVE_SYS_INOTIFY_H
+ int wd;
+ // Creation and Deletion of files happens infrequently, so
+ // can safely be reported as they occur. File changes i.e. those that emit "dirty()" can
+ // happen many times per second, though, so maintain a list of files in this directory
+ // that can be emitted and flushed at the next slotRescan(...).
+ // This will be unused if the Entry is not a directory.
+ QList<QString> m_pendingFileChanges;
+#endif
+ };
+
+ typedef QMap<QString, Entry> EntryMap;
+
+ KDirWatchPrivate();
+ ~KDirWatchPrivate();
+
+ void resetList(KDirWatch *instance, bool skippedToo);
+ void useFreq(Entry *e, int newFreq);
+ void addEntry(KDirWatch *instance, const QString &_path, Entry *sub_entry,
+ bool isDir, KDirWatch::WatchModes watchModes = KDirWatch::WatchDirOnly);
+ void removeEntry(KDirWatch *instance, const QString &path, Entry *sub_entry);
+ void removeEntry(KDirWatch *instance, Entry *e, Entry *sub_entry);
+ bool stopEntryScan(KDirWatch *instance, Entry *e);
+ bool restartEntryScan(KDirWatch *instance, Entry *e, bool notify);
+ void stopScan(KDirWatch *instance);
+ void startScan(KDirWatch *instance, bool notify, bool skippedToo);
+
+ void removeEntries(KDirWatch *instance);
+ void statistics();
+
+ void addWatch(Entry *entry);
+ void removeWatch(Entry *entry);
+ Entry *entry(const QString &_path);
+ int scanEntry(Entry *e);
+ void emitEvent(Entry *e, int event, const QString &fileName = QString());
+
+ static bool isNoisyFile(const char *filename);
+
+public Q_SLOTS:
+ void slotRescan();
+ void famEventReceived(); // for FAM
+ void inotifyEventReceived(); // for inotify
+ void slotRemoveDelayed();
+ void fswEventReceived(const QString &path); // for QFileSystemWatcher
+
+public:
+ QTimer timer;
+ EntryMap m_mapEntries;
+
+ KDirWatch::Method m_preferredMethod, m_nfsPreferredMethod;
+ int freq;
+ int statEntries;
+ int m_nfsPollInterval, m_PollInterval;
+ bool useStat(Entry *e);
+
+ // removeList is allowed to contain any entry at most once
+ QSet<Entry *> removeList;
+ bool delayRemove;
+
+ bool rescan_all;
+ QTimer rescan_timer;
+
+#if HAVE_FAM
+ QSocketNotifier *sn;
+ FAMConnection fc;
+ bool use_fam;
+
+ void checkFAMEvent(FAMEvent *fe);
+ bool useFAM(Entry *e);
+#endif
+
+#if HAVE_SYS_INOTIFY_H
+ QSocketNotifier *mSn;
+ bool supports_inotify;
+ int m_inotify_fd;
+ QHash<int, Entry *> m_inotify_wd_to_entry;
+
+ bool useINotify(Entry *e);
+#endif
+#if HAVE_QFILESYSTEMWATCHER
+ QFileSystemWatcher *fsWatcher;
+ bool useQFSWatch(Entry *e);
+#endif
+
+ bool _isStopped;
+};
+
+QDebug operator<<(QDebug debug, const KDirWatchPrivate::Entry &entry);
+
+#endif // KDIRWATCH_P_H
+
--- /dev/null
+/*
+ This file is part of the KDE libraries
+ Copyright (c) 2011 David Faure <faure@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include "kfilesystemtype.h"
+#include <QFile>
+#include "kcoreaddons_debug.h"
+//#include <errno.h>
+
+#ifndef Q_OS_WIN
+inline KFileSystemType::Type kde_typeFromName(const char *name)
+{
+ if (qstrncmp(name, "nfs", 3) == 0
+ || qstrncmp(name, "autofs", 6) == 0
+ || qstrncmp(name, "cachefs", 7) == 0
+ || qstrncmp(name, "fuse.sshfs", 10) == 0
+ || qstrncmp(name, "xtreemfs@", 9) == 0) { // #178678
+ return KFileSystemType::Nfs;
+ }
+ if (qstrncmp(name, "fat", 3) == 0
+ || qstrncmp(name, "vfat", 4) == 0
+ || qstrncmp(name, "msdos", 5) == 0) {
+ return KFileSystemType::Fat;
+ }
+ if (qstrncmp(name, "cifs", 4) == 0
+ || qstrncmp(name, "smbfs", 5) == 0) {
+ return KFileSystemType::Smb;
+ }
+ if (qstrncmp(name, "ramfs", 5) == 0) {
+ return KFileSystemType::Ramfs;
+ }
+
+ return KFileSystemType::Other;
+}
+
+#if defined(Q_OS_BSD4) && !defined(Q_OS_NETBSD)
+# include <sys/param.h>
+# include <sys/mount.h>
+
+KFileSystemType::Type determineFileSystemTypeImpl(const QByteArray &path)
+{
+ struct statfs buf;
+ if (statfs(path.constData(), &buf) != 0) {
+ return KFileSystemType::Unknown;
+ }
+ return kde_typeFromName(buf.f_fstypename);
+}
+
+#elif defined(Q_OS_LINUX) || defined(Q_OS_HURD)
+# include <sys/vfs.h>
+# ifdef QT_LINUXBASE
+// LSB 3.2 has statfs in sys/statfs.h, sys/vfs.h is just an empty dummy header
+# include <sys/statfs.h>
+# endif
+# ifndef NFS_SUPER_MAGIC
+# define NFS_SUPER_MAGIC 0x00006969
+# endif
+# ifndef AUTOFS_SUPER_MAGIC
+# define AUTOFS_SUPER_MAGIC 0x00000187
+# endif
+# ifndef AUTOFSNG_SUPER_MAGIC
+# define AUTOFSNG_SUPER_MAGIC 0x7d92b1a0
+# endif
+# ifndef MSDOS_SUPER_MAGIC
+# define MSDOS_SUPER_MAGIC 0x00004d44
+# endif
+# ifndef SMB_SUPER_MAGIC
+# define SMB_SUPER_MAGIC 0x0000517B
+#endif
+# ifndef FUSE_SUPER_MAGIC
+# define FUSE_SUPER_MAGIC 0x65735546
+# endif
+# ifndef RAMFS_MAGIC
+# define RAMFS_MAGIC 0x858458F6
+# endif
+
+// Reverse-engineering without C++ code:
+// strace stat -f /mnt 2>&1|grep statfs|grep mnt, and look for f_type
+
+static KFileSystemType::Type determineFileSystemTypeImpl(const QByteArray &path)
+{
+ struct statfs buf;
+ if (statfs(path.constData(), &buf) != 0) {
+ //qCDebug(KCOREADDONS_DEBUG) << path << errno << strerror(errno);
+ return KFileSystemType::Unknown;
+ }
+ switch (static_cast<unsigned long>(buf.f_type)) {
+ case NFS_SUPER_MAGIC:
+ case AUTOFS_SUPER_MAGIC:
+ case AUTOFSNG_SUPER_MAGIC:
+ case FUSE_SUPER_MAGIC: // TODO could be anything. Need to use statfs() to find out more.
+ return KFileSystemType::Nfs;
+ case SMB_SUPER_MAGIC:
+ return KFileSystemType::Smb;
+ case MSDOS_SUPER_MAGIC:
+ return KFileSystemType::Fat;
+ case RAMFS_MAGIC:
+ return KFileSystemType::Ramfs;
+ default:
+ return KFileSystemType::Other;
+ }
+}
+
+#elif defined(Q_OS_SOLARIS) || defined(Q_OS_IRIX) || defined(Q_OS_AIX) || defined(Q_OS_HPUX) \
+ || defined(Q_OS_OSF) || defined(Q_OS_QNX) || defined(Q_OS_SCO) \
+ || defined(Q_OS_UNIXWARE) || defined(Q_OS_RELIANT) || defined(Q_OS_NETBSD)
+# include <sys/statvfs.h>
+
+KFileSystemType::Type determineFileSystemTypeImpl(const QByteArray &path)
+{
+ struct statvfs buf;
+ if (statvfs(path.constData(), &buf) != 0) {
+ return KFileSystemType::Unknown;
+ }
+#if defined(Q_OS_NETBSD)
+ return kde_typeFromName(buf.f_fstypename);
+#else
+ return kde_typeFromName(buf.f_basetype);
+#endif
+}
+#endif
+#else
+KFileSystemType::Type determineFileSystemTypeImpl(const QByteArray &path)
+{
+ return KFileSystemType::Unknown;
+}
+#endif
+
+KFileSystemType::Type KFileSystemType::fileSystemType(const QString &path)
+{
+ return determineFileSystemTypeImpl(QFile::encodeName(path));
+}
--- /dev/null
+/*
+ This file is part of the KDE libraries
+ Copyright (c) 2011 David Faure <faure@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef KFILESYSTEMTYPE_P_H
+#define KFILESYSTEMTYPE_P_H
+
+#include <QString>
+#include <kcoreaddons_export.h>
+
+/**
+ * @namespace KFileSystemType
+ * Provides utility functions for the type of file systems.
+ */
+namespace KFileSystemType
+{
+enum Type {
+ Unknown,
+ Nfs, ///< NFS or other full-featured networked filesystems (autofs, subfs, cachefs, sshfs)
+ Smb, ///< SMB/CIFS mount (networked but with some FAT-like behavior)
+ Fat, ///< FAT or similar (msdos, fat, vfat)
+ Ramfs, ///< RAMDISK mount
+ Other ///< ext, reiser, and so on. "Normal" local filesystems.
+};
+
+/**
+ * Returns the file system type at a given path, as much as we are able to figure it out.
+ * @since 5.0
+ */
+KCOREADDONS_EXPORT Type fileSystemType(const QString &path);
+
+}
+
+#endif
--- /dev/null
+/* This file is part of the KDE libraries
+ Copyright (C) 2006 Michaël Larouche <michael.larouche@kdemail.net>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; version 2
+ of the License.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+#include "kmessage.h"
+
+#include <QLatin1String>
+
+#include <iostream>
+
+class StaticMessageHandler
+{
+public:
+ StaticMessageHandler() {}
+ ~StaticMessageHandler()
+ {
+ delete m_handler;
+ }
+ /* Sets the new message handler and deletes the old one */
+ void setHandler(KMessageHandler *handler)
+ {
+ delete m_handler;
+ m_handler = handler;
+ }
+ KMessageHandler *handler() const
+ {
+ return m_handler;
+ }
+
+protected:
+ KMessageHandler *m_handler = nullptr;
+};
+Q_GLOBAL_STATIC(StaticMessageHandler, s_messageHandler)
+
+static void internalMessageFallback(KMessage::MessageType messageType, const QString &text, const QString &caption)
+{
+ QString prefix;
+ switch (messageType) {
+ case KMessage::Error:
+ prefix = QStringLiteral("ERROR: ");
+ break;
+ case KMessage::Fatal:
+ prefix = QStringLiteral("FATAL: ");
+ break;
+ case KMessage::Information:
+ prefix = QStringLiteral("INFORMATION: ");
+ break;
+ case KMessage::Sorry:
+ prefix = QStringLiteral("SORRY: ");
+ break;
+ case KMessage::Warning:
+ prefix = QStringLiteral("WARNING: ");
+ break;
+ }
+
+ QString message;
+
+ if (!caption.isEmpty()) {
+ message += QLatin1Char('(') + caption + QLatin1Char(')');
+ }
+
+ message += prefix + text;
+
+ // Show a message to the developer to setup a KMessageHandler
+ std::cerr << "WARNING: Please setup an KMessageHandler with KMessage::setMessageHandler to display message propertly." << std::endl;
+ // Show message to stdout
+ std::cerr << qPrintable(message) << std::endl;
+}
+
+void KMessage::setMessageHandler(KMessageHandler *handler)
+{
+ // Delete old message handler.
+ s_messageHandler()->setHandler(handler);
+}
+
+void KMessage::message(KMessage::MessageType messageType, const QString &text, const QString &caption)
+{
+ // Use current message handler if available, else use stdout
+ if (s_messageHandler()->handler()) {
+ s_messageHandler()->handler()->message(messageType, text, caption);
+ } else {
+ internalMessageFallback(messageType, text, caption);
+ }
+}
+
--- /dev/null
+/* This file is part of the KDE libraries
+ Copyright (C) 2006 Michaël Larouche <michael.larouche@kdemail.net>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; version 2
+ of the License.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+#ifndef KDECORE_KMESSAGE_H
+#define KDECORE_KMESSAGE_H
+
+#include <kcoreaddons_export.h>
+
+#include <QString>
+
+class KMessageHandler;
+/**
+ * @brief Display an informative message using a KMessageHandler.
+ *
+ * This class does not define how to display a message, it is just
+ * a clean interface for developers to use.
+ * The job is done by the current KMessageHandler set in the class.
+ *
+ * If no KMessageHandler is currently registered in KMessage,
+ * the message will be outputed to stderr.
+ *
+ * Use KMessage::setMessageHandler() to use a KMessageHandler.
+ *
+ * @code
+ * KMessage::setMessageHandler( new KMessageBoxHandler(this) );
+ * // some operation
+ *
+ * KMessage::message( KMessage::Error, i18n("Could not load service. Use kbuildsycoca to fix the service database."), i18n("KService") );
+ * @endcode
+ *
+ * Some KMessageHandler are already done such as KMessageBoxMessageHandler and KPassivePopupMessageHandler.
+ * @author Michaël Larouche <michael.larouche@kdemail.net>
+ */
+namespace KMessage
+{
+enum MessageType {
+ /**
+ * Error message.
+ * Display critical information that affect the behavior of the application.
+ */
+ Error,
+ /**
+ * Information message.
+ * Display useful information to the user.
+ */
+ Information,
+ /**
+ * Warning message.
+ * Display a message that could affect the behavior of the application.
+ */
+ Warning,
+ /**
+ * Sorry message.
+ * Display a message explaining that a task couldn't be accomplished.
+ */
+ Sorry,
+ /**
+ * Fatal message.
+ * Display a message before the application fail and close itself.
+ */
+ Fatal
+};
+
+/**
+ * @brief Display a long message of a certain type.
+ * A long message span on multiple lines and can have a caption.
+ *
+ * @param messageType Currrent type of message. See MessageType enum.
+ * @param text Long message to be displayed.
+ * @param caption Caption to be used. This is optional.
+ */
+KCOREADDONS_EXPORT void message(KMessage::MessageType messageType, const QString &text, const QString &caption = QString());
+
+/**
+ * @brief Set the current KMessageHandler
+ * Note that this method takes ownership of the KMessageHandler.
+ * @param handler Instance of a real KMessageHandler.
+ *
+ * @warning This function isn't thread-safe. You don't want to
+ * change the message handler during the program's
+ * execution anyways. Do so <b>only</b> at start-up.
+ */
+KCOREADDONS_EXPORT void setMessageHandler(KMessageHandler *handler);
+}
+
+/**
+ * \class KMessageHandler kmessage.h <KMessageHandler>
+ *
+ * @brief Abstract class for KMessage handler.
+ * This class define how KMessage display a message.
+ *
+ * Reimplement the virtual methods then set your custom
+ * KMessageHandler using KMessage::setMessageHandler()
+ *
+ * @author Michaël Larouche <michael.larouche@kdemail.net>
+ */
+class KCOREADDONS_EXPORT KMessageHandler
+{
+public:
+ virtual ~KMessageHandler() {} // KF6 TODO: de-inline (-Wweak-vtables)
+ /**
+ * @brief Display a long message of a certain type.
+ * A long message span on multiple lines and can have a caption.
+ *
+ * @param type Currrent type of message. See MessageType enum.
+ * @param text Long message to be displayed.
+ * @param caption Caption to be used. This is optional.
+ */
+ virtual void message(KMessage::MessageType type, const QString &text, const QString &caption) = 0;
+};
+
+#endif
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ Copyright (C) 2007 Oswald Buddenhagen <ossi@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include "kprocess_p.h"
+
+#include <qstandardpaths.h>
+#include <qplatformdefs.h>
+#include <kshell.h>
+#ifdef Q_OS_WIN
+# include <qt_windows.h>
+# include <kshell_p.h>
+#endif
+
+#include <qfile.h>
+
+/////////////////////////////
+// public member functions //
+/////////////////////////////
+
+KProcess::KProcess(QObject *parent) :
+ QProcess(parent),
+ d_ptr(new KProcessPrivate(this))
+{
+ setOutputChannelMode(ForwardedChannels);
+}
+
+KProcess::KProcess(KProcessPrivate *d, QObject *parent) :
+ QProcess(parent),
+ d_ptr(d)
+{
+ d_ptr->q_ptr = this;
+ setOutputChannelMode(ForwardedChannels);
+}
+
+KProcess::~KProcess()
+{
+ delete d_ptr;
+}
+
+void KProcess::setOutputChannelMode(OutputChannelMode mode)
+{
+ QProcess::setProcessChannelMode(static_cast<ProcessChannelMode>(mode));
+}
+
+KProcess::OutputChannelMode KProcess::outputChannelMode() const
+{
+ return static_cast<OutputChannelMode>(QProcess::processChannelMode());
+}
+
+void KProcess::setNextOpenMode(QIODevice::OpenMode mode)
+{
+ Q_D(KProcess);
+
+ d->openMode = mode;
+}
+
+#define DUMMYENV "_KPROCESS_DUMMY_="
+
+void KProcess::clearEnvironment()
+{
+ setEnvironment(QStringList() << QStringLiteral(DUMMYENV));
+}
+
+void KProcess::setEnv(const QString &name, const QString &value, bool overwrite)
+{
+ QStringList env = environment();
+ if (env.isEmpty()) {
+ env = systemEnvironment();
+ env.removeAll(QStringLiteral(DUMMYENV));
+ }
+ QString fname(name);
+ fname.append(QLatin1Char('='));
+ for (QStringList::Iterator it = env.begin(); it != env.end(); ++it)
+ if ((*it).startsWith(fname)) {
+ if (overwrite) {
+ *it = fname.append(value);
+ setEnvironment(env);
+ }
+ return;
+ }
+ env.append(fname.append(value));
+ setEnvironment(env);
+}
+
+void KProcess::unsetEnv(const QString &name)
+{
+ QStringList env = environment();
+ if (env.isEmpty()) {
+ env = systemEnvironment();
+ env.removeAll(QStringLiteral(DUMMYENV));
+ }
+ QString fname(name);
+ fname.append(QLatin1Char('='));
+ for (QStringList::Iterator it = env.begin(); it != env.end(); ++it)
+ if ((*it).startsWith(fname)) {
+ env.erase(it);
+ if (env.isEmpty()) {
+ env.append(QStringLiteral(DUMMYENV));
+ }
+ setEnvironment(env);
+ return;
+ }
+}
+
+void KProcess::setProgram(const QString &exe, const QStringList &args)
+{
+ Q_D(KProcess);
+
+ d->prog = exe;
+ d->args = args;
+#ifdef Q_OS_WIN
+ setNativeArguments(QString());
+#endif
+}
+
+void KProcess::setProgram(const QStringList &argv)
+{
+ Q_D(KProcess);
+
+ Q_ASSERT(!argv.isEmpty());
+ d->args = argv;
+ d->prog = d->args.takeFirst();
+#ifdef Q_OS_WIN
+ setNativeArguments(QString());
+#endif
+}
+
+KProcess &KProcess::operator<<(const QString &arg)
+{
+ Q_D(KProcess);
+
+ if (d->prog.isEmpty()) {
+ d->prog = arg;
+ } else {
+ d->args << arg;
+ }
+ return *this;
+}
+
+KProcess &KProcess::operator<<(const QStringList &args)
+{
+ Q_D(KProcess);
+
+ if (d->prog.isEmpty()) {
+ setProgram(args);
+ } else {
+ d->args << args;
+ }
+ return *this;
+}
+
+void KProcess::clearProgram()
+{
+ Q_D(KProcess);
+
+ d->prog.clear();
+ d->args.clear();
+#ifdef Q_OS_WIN
+ setNativeArguments(QString());
+#endif
+}
+
+void KProcess::setShellCommand(const QString &cmd)
+{
+ Q_D(KProcess);
+
+ KShell::Errors err;
+ d->args = KShell::splitArgs(
+ cmd, KShell::AbortOnMeta | KShell::TildeExpand, &err);
+ if (err == KShell::NoError && !d->args.isEmpty()) {
+ d->prog = QStandardPaths::findExecutable(d->args[0]);
+ if (!d->prog.isEmpty()) {
+ d->args.removeFirst();
+#ifdef Q_OS_WIN
+ setNativeArguments(QString());
+#endif
+ return;
+ }
+ }
+
+ d->args.clear();
+
+#ifdef Q_OS_UNIX
+// #ifdef NON_FREE // ... as they ship non-POSIX /bin/sh
+# if !defined(__linux__) && !defined(__FreeBSD__) && !defined(__NetBSD__) && !defined(__OpenBSD__) && !defined(__DragonFly__) && !defined(__GNU__) && !defined(__APPLE__)
+ // If /bin/sh is a symlink, we can be pretty sure that it points to a
+ // POSIX shell - the original bourne shell is about the only non-POSIX
+ // shell still in use and it is always installed natively as /bin/sh.
+ d->prog = QFile::symLinkTarget(QStringLiteral("/bin/sh"));
+ if (d->prog.isEmpty()) {
+ // Try some known POSIX shells.
+ d->prog = QStandardPaths::findExecutable(QStringLiteral("ksh"));
+ if (d->prog.isEmpty()) {
+ d->prog = QStandardPaths::findExecutable(QStringLiteral("ash"));
+ if (d->prog.isEmpty()) {
+ d->prog = QStandardPaths::findExecutable(QStringLiteral("bash"));
+ if (d->prog.isEmpty()) {
+ d->prog = QStandardPaths::findExecutable(QStringLiteral("zsh"));
+ if (d->prog.isEmpty())
+ // We're pretty much screwed, to be honest ...
+ {
+ d->prog = QStringLiteral("/bin/sh");
+ }
+ }
+ }
+ }
+ }
+# else
+ d->prog = QStringLiteral("/bin/sh");
+# endif
+
+ d->args << QStringLiteral("-c") << cmd;
+#else // Q_OS_UNIX
+ // KMacroExpander::expandMacrosShellQuote(), KShell::quoteArg() and
+ // KShell::joinArgs() may generate these for security reasons.
+ setEnv(PERCENT_VARIABLE, QStringLiteral("%"));
+
+#ifndef _WIN32_WCE
+ WCHAR sysdir[MAX_PATH + 1];
+ UINT size = GetSystemDirectoryW(sysdir, MAX_PATH + 1);
+ d->prog = QString::fromUtf16((const ushort *) sysdir, size);
+ d->prog += QLatin1String("\\cmd.exe");
+ setNativeArguments(QStringLiteral("/V:OFF /S /C \"") + cmd + QLatin1Char('"'));
+#else
+ d->prog = QStringLiteral("\\windows\\cmd.exe");
+ setNativeArguments(QStringLiteral("/S /C \"") + cmd + QLatin1Char('"'));
+#endif
+#endif
+}
+
+QStringList KProcess::program() const
+{
+ Q_D(const KProcess);
+
+ QStringList argv = d->args;
+ argv.prepend(d->prog);
+ return argv;
+}
+
+void KProcess::start()
+{
+ Q_D(KProcess);
+
+ QProcess::start(d->prog, d->args, d->openMode);
+}
+
+int KProcess::execute(int msecs)
+{
+ start();
+ if (!waitForFinished(msecs)) {
+ kill();
+ waitForFinished(-1);
+ return -2;
+ }
+ return (exitStatus() == QProcess::NormalExit) ? exitCode() : -1;
+}
+
+// static
+int KProcess::execute(const QString &exe, const QStringList &args, int msecs)
+{
+ KProcess p;
+ p.setProgram(exe, args);
+ return p.execute(msecs);
+}
+
+// static
+int KProcess::execute(const QStringList &argv, int msecs)
+{
+ KProcess p;
+ p.setProgram(argv);
+ return p.execute(msecs);
+}
+
+int KProcess::startDetached()
+{
+ Q_D(KProcess);
+
+ qint64 pid;
+ if (!QProcess::startDetached(d->prog, d->args, workingDirectory(), &pid)) {
+ return 0;
+ }
+ return static_cast<int>(pid);
+}
+
+// static
+int KProcess::startDetached(const QString &exe, const QStringList &args)
+{
+ qint64 pid;
+ if (!QProcess::startDetached(exe, args, QString(), &pid)) {
+ return 0;
+ }
+ return static_cast<int>(pid);
+}
+
+// static
+int KProcess::startDetached(const QStringList &argv)
+{
+ QStringList args = argv;
+ QString prog = args.takeFirst();
+ return startDetached(prog, args);
+}
+
+int KProcess::pid() const
+{
+#ifdef Q_OS_UNIX
+ return static_cast<int>(QProcess::pid());
+#else
+ return QProcess::pid() ? QProcess::pid()->dwProcessId : 0;
+#endif
+}
+
+#include "moc_kprocess.cpp"
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ Copyright (C) 2007 Oswald Buddenhagen <ossi@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef KPROCESS_H
+#define KPROCESS_H
+
+#include <kcoreaddons_export.h>
+
+#include <QProcess>
+
+class KProcessPrivate;
+
+/**
+ * \class KProcess kprocess.h <KProcess>
+ *
+ * Child process invocation, monitoring and control.
+ *
+ * This class extends QProcess by some useful functionality, overrides
+ * some defaults with saner values and wraps parts of the API into a more
+ * accessible one.
+ * Only use KProcess if you need the extra features, otherwise QProcess
+ * is the preferred way of spawning child processes.
+ *
+ * @author Oswald Buddenhagen <ossi@kde.org>
+ **/
+class KCOREADDONS_EXPORT KProcess : public QProcess
+{
+ Q_OBJECT
+ Q_DECLARE_PRIVATE(KProcess)
+
+public:
+
+ /**
+ * Modes in which the output channels can be opened.
+ */
+ enum OutputChannelMode {
+ SeparateChannels = QProcess::SeparateChannels,
+ /**< Standard output and standard error are handled by KProcess
+ as separate channels */
+ MergedChannels = QProcess::MergedChannels,
+ /**< Standard output and standard error are handled by KProcess
+ as one channel */
+ ForwardedChannels = QProcess::ForwardedChannels,
+ /**< Both standard output and standard error are forwarded
+ to the parent process' respective channel */
+ OnlyStdoutChannel = QProcess::ForwardedErrorChannel,
+ /**< Only standard output is handled; standard error is forwarded */
+ OnlyStderrChannel = QProcess::ForwardedOutputChannel
+ /**< Only standard error is handled; standard output is forwarded */
+ };
+
+ /**
+ * Constructor
+ */
+ explicit KProcess(QObject *parent = nullptr);
+
+ /**
+ * Destructor
+ */
+ ~KProcess() override;
+
+ /**
+ * Set how to handle the output channels of the child process.
+ *
+ * The default is ForwardedChannels, which is unlike in QProcess.
+ * Do not request more than you actually handle, as this output is
+ * simply lost otherwise.
+ *
+ * This function must be called before starting the process.
+ *
+ * @param mode the output channel handling mode
+ */
+ void setOutputChannelMode(OutputChannelMode mode);
+
+ /**
+ * Query how the output channels of the child process are handled.
+ *
+ * @return the output channel handling mode
+ */
+ OutputChannelMode outputChannelMode() const;
+
+ /**
+ * Set the QIODevice open mode the process will be opened in.
+ *
+ * This function must be called before starting the process, obviously.
+ *
+ * @param mode the open mode. Note that this mode is automatically
+ * "reduced" according to the channel modes and redirections.
+ * The default is QIODevice::ReadWrite.
+ */
+ void setNextOpenMode(QIODevice::OpenMode mode);
+
+ /**
+ * Adds the variable @p name to the process' environment.
+ *
+ * This function must be called before starting the process.
+ *
+ * @param name the name of the environment variable
+ * @param value the new value for the environment variable
+ * @param overwrite if @c false and the environment variable is already
+ * set, the old value will be preserved
+ */
+ void setEnv(const QString &name, const QString &value, bool overwrite = true);
+
+ /**
+ * Removes the variable @p name from the process' environment.
+ *
+ * This function must be called before starting the process.
+ *
+ * @param name the name of the environment variable
+ */
+ void unsetEnv(const QString &name);
+
+ /**
+ * Empties the process' environment.
+ *
+ * Note that LD_LIBRARY_PATH/DYLD_LIBRARY_PATH is automatically added
+ * on *NIX.
+ *
+ * This function must be called before starting the process.
+ */
+ void clearEnvironment();
+
+ /**
+ * Set the program and the command line arguments.
+ *
+ * This function must be called before starting the process, obviously.
+ *
+ * @param exe the program to execute
+ * @param args the command line arguments for the program,
+ * one per list element
+ */
+ void setProgram(const QString &exe, const QStringList &args = QStringList());
+
+ /**
+ * @overload
+ *
+ * @param argv the program to execute and the command line arguments
+ * for the program, one per list element
+ */
+ void setProgram(const QStringList &argv);
+
+ /**
+ * Append an element to the command line argument list for this process.
+ *
+ * If no executable is set yet, it will be set instead.
+ *
+ * For example, doing an "ls -l /usr/local/bin" can be achieved by:
+ * \code
+ * KProcess p;
+ * p << "ls" << "-l" << "/usr/local/bin";
+ * ...
+ * \endcode
+ *
+ * This function must be called before starting the process, obviously.
+ *
+ * @param arg the argument to add
+ * @return a reference to this KProcess
+ */
+ KProcess &operator<<(const QString &arg);
+
+ /**
+ * @overload
+ *
+ * @param args the arguments to add
+ * @return a reference to this KProcess
+ */
+ KProcess &operator<<(const QStringList &args);
+
+ /**
+ * Clear the program and command line argument list.
+ */
+ void clearProgram();
+
+ /**
+ * Set a command to execute through a shell (a POSIX sh on *NIX
+ * and cmd.exe on Windows).
+ *
+ * Using this for anything but user-supplied commands is usually a bad
+ * idea, as the command's syntax depends on the platform.
+ * Redirections including pipes, etc. are better handled by the
+ * respective functions provided by QProcess.
+ *
+ * If KProcess determines that the command does not really need a
+ * shell, it will transparently execute it without one for performance
+ * reasons.
+ *
+ * This function must be called before starting the process, obviously.
+ *
+ * @param cmd the command to execute through a shell.
+ * The caller must make sure that all filenames etc. are properly
+ * quoted when passed as argument. Failure to do so often results in
+ * serious security holes. See KShell::quoteArg().
+ */
+ void setShellCommand(const QString &cmd);
+
+ /**
+ * Obtain the currently set program and arguments.
+ *
+ * @return a list, the first element being the program, the remaining ones
+ * being command line arguments to the program.
+ */
+ QStringList program() const;
+
+ /**
+ * Start the process.
+ *
+ * @see QProcess::start(const QString &, const QStringList &, OpenMode)
+ */
+ void start();
+
+ /**
+ * Start the process, wait for it to finish, and return the exit code.
+ *
+ * This method is roughly equivalent to the sequence:
+ * <code>
+ * start();
+ * waitForFinished(msecs);
+ * return exitCode();
+ * </code>
+ *
+ * Unlike the other execute() variants this method is not static,
+ * so the process can be parametrized properly and talked to.
+ *
+ * @param msecs time to wait for process to exit before killing it
+ * @return -2 if the process could not be started, -1 if it crashed,
+ * otherwise its exit code
+ */
+ int execute(int msecs = -1);
+
+ /**
+ * @overload
+ *
+ * @param exe the program to execute
+ * @param args the command line arguments for the program,
+ * one per list element
+ * @param msecs time to wait for process to exit before killing it
+ * @return -2 if the process could not be started, -1 if it crashed,
+ * otherwise its exit code
+ */
+ static int execute(const QString &exe, const QStringList &args = QStringList(), int msecs = -1);
+
+ /**
+ * @overload
+ *
+ * @param argv the program to execute and the command line arguments
+ * for the program, one per list element
+ * @param msecs time to wait for process to exit before killing it
+ * @return -2 if the process could not be started, -1 if it crashed,
+ * otherwise its exit code
+ */
+ static int execute(const QStringList &argv, int msecs = -1);
+
+ /**
+ * Start the process and detach from it. See QProcess::startDetached()
+ * for details.
+ *
+ * Unlike the other startDetached() variants this method is not static,
+ * so the process can be parametrized properly.
+ * @note Currently, only the setProgram()/setShellCommand() and
+ * setWorkingDirectory() parametrizations are supported.
+ *
+ * The KProcess object may be re-used immediately after calling this
+ * function.
+ *
+ * @return the PID of the started process or 0 on error
+ */
+ int startDetached();
+
+ /**
+ * @overload
+ *
+ * @param exe the program to start
+ * @param args the command line arguments for the program,
+ * one per list element
+ * @return the PID of the started process or 0 on error
+ */
+ static int startDetached(const QString &exe, const QStringList &args = QStringList());
+
+ /**
+ * @overload
+ *
+ * @param argv the program to start and the command line arguments
+ * for the program, one per list element
+ * @return the PID of the started process or 0 on error
+ */
+ static int startDetached(const QStringList &argv);
+
+ /**
+ * Obtain the process' ID as known to the system.
+ *
+ * Unlike with QProcess::pid(), this is a real PID also on Windows.
+ *
+ * This function can be called only while the process is running.
+ * It cannot be applied to detached processes.
+ *
+ * @return the process ID
+ */
+ int pid() const;
+
+protected:
+ /**
+ * @internal
+ */
+ KProcess(KProcessPrivate *d, QObject *parent);
+
+ /**
+ * @internal
+ */
+ KProcessPrivate *const d_ptr;
+
+private:
+ // hide those
+ using QProcess::setReadChannelMode;
+ using QProcess::readChannelMode;
+ using QProcess::setProcessChannelMode;
+ using QProcess::processChannelMode;
+};
+
+#endif
+
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ Copyright (C) 2007 Oswald Buddenhagen <ossi@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef KPROCESS_P_H
+#define KPROCESS_P_H
+
+#include "kprocess.h"
+
+class KProcessPrivate
+{
+ Q_DECLARE_PUBLIC(KProcess)
+protected:
+ KProcessPrivate(KProcess* q) :
+ openMode(QIODevice::ReadWrite),
+ q_ptr(q)
+ {
+ }
+
+ QString prog;
+ QStringList args;
+ QIODevice::OpenMode openMode;
+
+ KProcess *q_ptr;
+};
+
+#endif
--- /dev/null
+/* This file is part of the KDE libraries
+ * Copyright (C) 2005-2012 David Faure <faure@kde.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "kurlmimedata.h"
+#include <QStringList>
+#include <QMimeData>
+
+static QString kdeUriListMime() { return QStringLiteral("application/x-kde4-urilist"); } // keep this name "kde4" for compat.
+
+static QByteArray uriListData(const QList<QUrl> &urls)
+{
+ // compatible with qmimedata.cpp encoding of QUrls
+ QByteArray result;
+ for (int i = 0; i < urls.size(); ++i) {
+ result += urls.at(i).toEncoded();
+ result += "\r\n";
+ }
+ return result;
+}
+
+void KUrlMimeData::setUrls(const QList<QUrl> &urls, const QList<QUrl> &mostLocalUrls,
+ QMimeData *mimeData)
+{
+ // Export the most local urls as text/uri-list and plain text, for non KDE apps.
+ mimeData->setUrls(mostLocalUrls); // set text/uri-list and text/plain
+
+ // Export the real KIO urls as a kde-specific mimetype
+ mimeData->setData(kdeUriListMime(), uriListData(urls));
+}
+
+void KUrlMimeData::setMetaData(const MetaDataMap &metaData, QMimeData *mimeData)
+{
+ QByteArray metaDataData; // :)
+ for (MetaDataMap::const_iterator it = metaData.begin(); it != metaData.end(); ++it) {
+ metaDataData += it.key().toUtf8();
+ metaDataData += "$@@$";
+ metaDataData += it.value().toUtf8();
+ metaDataData += "$@@$";
+ }
+ mimeData->setData(QStringLiteral("application/x-kio-metadata"), metaDataData);
+}
+
+QStringList KUrlMimeData::mimeDataTypes()
+{
+ return QStringList() << kdeUriListMime() << QStringLiteral("text/uri-list");
+}
+
+static QList<QUrl> extractKdeUriList(const QMimeData *mimeData)
+{
+ QList<QUrl> uris;
+ const QByteArray ba = mimeData->data(kdeUriListMime());
+ // Code from qmimedata.cpp
+ QList<QByteArray> urls = ba.split('\n');
+ for (int i = 0; i < urls.size(); ++i) {
+ QByteArray data = urls.at(i).trimmed();
+ if (!data.isEmpty()) {
+ uris.append(QUrl::fromEncoded(data));
+ }
+ }
+ return uris;
+}
+
+
+QList<QUrl> KUrlMimeData::urlsFromMimeData(const QMimeData *mimeData,
+ DecodeOptions decodeOptions,
+ MetaDataMap *metaData)
+{
+ QList<QUrl> uris;
+ if (decodeOptions == PreferLocalUrls) {
+ // Extracting uris from text/uri-list, use the much faster QMimeData method urls()
+ uris = mimeData->urls();
+ if (uris.isEmpty()) {
+ uris = extractKdeUriList(mimeData);
+ }
+ } else {
+ uris = extractKdeUriList(mimeData);
+ if (uris.isEmpty()) {
+ uris = mimeData->urls();
+ }
+ }
+
+ if (metaData) {
+ const QByteArray metaDataPayload = mimeData->data(QStringLiteral("application/x-kio-metadata"));
+ if (!metaDataPayload.isEmpty()) {
+ QString str = QString::fromUtf8(metaDataPayload.constData());
+ Q_ASSERT(str.endsWith(QLatin1String("$@@$")));
+ str.truncate(str.length() - 4);
+ const QStringList lst = str.split(QStringLiteral("$@@$"));
+ bool readingKey = true; // true, then false, then true, etc.
+ QString key;
+ for (QStringList::const_iterator it = lst.begin(); it != lst.end(); ++it) {
+ if (readingKey) {
+ key = *it;
+ } else {
+ metaData->insert(key, *it);
+ }
+ readingKey = !readingKey;
+ }
+ Q_ASSERT(readingKey); // an odd number of items would be, well, odd ;-)
+ }
+ }
+ return uris;
+}
+
--- /dev/null
+/* This file is part of the KDE libraries
+ * Copyright (C) 2005-2012 David Faure <faure@kde.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef KURLMIMEDATA_H
+#define KURLMIMEDATA_H
+
+#include <QMap>
+#include <QUrl>
+#include "kcoreaddons_export.h"
+QT_BEGIN_NAMESPACE
+class QMimeData;
+QT_END_NAMESPACE
+
+/**
+ * Utility functions for using URLs in QMimeData.
+ * In addition to QMimeData::setUrls() and QMimeData::urls(), these functions allow to:
+ *
+ * - Store two sets of URLs, the KDE-specific URLs and the equivalent local-file URLs
+ * for compatibility with non-KDE applications
+ * - Store KIO metadata, such as the HTTP referrer for a given URL (some websites
+ * require it for downloading e.g. an image)
+ *
+ * @since 5.0
+ */
+namespace KUrlMimeData
+{
+typedef QMap<QString, QString> MetaDataMap;
+
+/**
+ * Adds URLs and KIO metadata into the given QMimeData.
+ *
+ * WARNING: do not call this method multiple times on the same mimedata object,
+ * you can add urls only once. But you can add other things, e.g. images, XML...
+ *
+ * @param mimeData the QMimeData instance used to drag or copy this URL
+ */
+KCOREADDONS_EXPORT void setUrls(const QList<QUrl> &urls, const QList<QUrl> &mostLocalUrls,
+ QMimeData *mimeData);
+/**
+ * @param metaData KIO metadata shipped in the mime data, which is used for instance to
+ * set a correct HTTP referrer (some websites require it for downloading e.g. an image)
+ */
+KCOREADDONS_EXPORT void setMetaData(const MetaDataMap &metaData, QMimeData *mimeData);
+
+/**
+ * Return the list of mimeTypes that can be decoded by urlsFromMimeData
+ */
+KCOREADDONS_EXPORT QStringList mimeDataTypes();
+
+/**
+ * Flags to be used in urlsFromMimeData.
+ */
+enum DecodeOptions {
+ /**
+ * When the mimedata contains both KDE-style URLs (eg: desktop:/foo) and
+ * the "most local" version of the URLs (eg: file:///home/dfaure/Desktop/foo),
+ * decode it as local urls. Useful in paste/drop operations that end up calling KIO,
+ * so that urls from other users work as well.
+ */
+ PreferLocalUrls,
+ /**
+ * When the mimedata contains both KDE-style URLs (eg: desktop:/foo) and
+ * the "most local" version of the URLs (eg: file:///home/dfaure/Desktop/foo),
+ * decode it as the KDE-style URL. Useful in DnD code e.g. when moving icons,
+ * and the kde-style url is used as identifier for the icons.
+ */
+ PreferKdeUrls
+};
+
+/**
+ * Extract a list of urls from the contents of @p mimeData.
+ *
+ * Compared to QMimeData::urls(), this method has support for retrieving KDE-specific URLs
+ * when urls() would retrieve "most local URLs" instead.
+ *
+ * Decoding will fail if @p mimeData does not contain any URLs, or if at
+ * least one extracted URL is not valid.
+ *
+ * @param mimeData the mime data to extract from; cannot be 0
+ * @param decodeOptions options for decoding
+ * @param metaData optional pointer to a map which will hold the metadata after this call
+ * @return the list of urls
+ */
+KCOREADDONS_EXPORT QList<QUrl> urlsFromMimeData(const QMimeData *mimeData,
+ DecodeOptions decodeOptions = PreferKdeUrls,
+ MetaDataMap *metaData = nullptr);
+
+}
+
+#endif /* KURLMIMEDATA_H */
+
--- /dev/null
+/* This file is part of the KDE project
+ Copyright (C) 2006 Kevin Ottens <ervin@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+
+*/
+
+#include "kcompositejob.h"
+#include "kcompositejob_p.h"
+
+KCompositeJobPrivate::KCompositeJobPrivate()
+{
+}
+
+KCompositeJobPrivate::~KCompositeJobPrivate()
+{
+}
+
+KCompositeJob::KCompositeJob(QObject *parent)
+ : KJob(*new KCompositeJobPrivate, parent)
+{
+}
+
+KCompositeJob::KCompositeJob(KCompositeJobPrivate &dd, QObject *parent)
+ : KJob(dd, parent)
+{
+}
+
+KCompositeJob::~KCompositeJob()
+{
+}
+
+bool KCompositeJob::addSubjob(KJob *job)
+{
+ Q_D(KCompositeJob);
+ if (job == nullptr || d->subjobs.contains(job)) {
+ return false;
+ }
+
+ job->setParent(this);
+ d->subjobs.append(job);
+ connect(job, &KJob::result, this, &KCompositeJob::slotResult);
+
+ // Forward information from that subjob.
+ connect(job, &KJob::infoMessage, this, &KCompositeJob::slotInfoMessage);
+
+ return true;
+}
+
+bool KCompositeJob::removeSubjob(KJob *job)
+{
+ Q_D(KCompositeJob);
+ // remove only Subjobs that are on the list
+ if (d->subjobs.removeAll(job) > 0) {
+ job->setParent(nullptr);
+ disconnect(job, &KJob::result, this, &KCompositeJob::slotResult);
+ disconnect(job, &KJob::infoMessage, this, &KCompositeJob::slotInfoMessage);
+ return true;
+ }
+ return false;
+}
+
+bool KCompositeJob::hasSubjobs() const
+{
+ return !d_func()->subjobs.isEmpty();
+}
+
+const QList<KJob *> &KCompositeJob::subjobs() const
+{
+ return d_func()->subjobs;
+}
+
+void KCompositeJob::clearSubjobs()
+{
+ Q_D(KCompositeJob);
+ Q_FOREACH (KJob *job, d->subjobs) {
+ job->setParent(nullptr);
+ disconnect(job, &KJob::result, this, &KCompositeJob::slotResult);
+ disconnect(job, &KJob::infoMessage, this, &KCompositeJob::slotInfoMessage);
+ }
+ d->subjobs.clear();
+}
+
+void KCompositeJob::slotResult(KJob *job)
+{
+ // Did job have an error ?
+ if (job->error() && !error()) {
+ // Store it in the parent only if first error
+ setError(job->error());
+ setErrorText(job->errorText());
+ // Finish this job
+ emitResult();
+ }
+ // After a subjob is done, we might want to start another one.
+ // Therefore do not emitResult
+ removeSubjob(job);
+}
+
+void KCompositeJob::slotInfoMessage(KJob *job, const QString &plain, const QString &rich)
+{
+ emit infoMessage(job, plain, rich);
+}
+
+#include "moc_kcompositejob.cpp"
--- /dev/null
+/* This file is part of the KDE project
+ Copyright (C) 2006 Kevin Ottens <ervin@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+
+*/
+
+#ifndef KCOMPOSITEJOB_H
+#define KCOMPOSITEJOB_H
+
+#include <kcoreaddons_export.h>
+#include <kjob.h>
+
+#include <QList>
+
+class KCompositeJobPrivate;
+/**
+ * @class KCompositeJob kcompositejob.h KCompositeJob
+ *
+ * The base class for all jobs able to be composed of one
+ * or more subjobs.
+ */
+class KCOREADDONS_EXPORT KCompositeJob : public KJob
+{
+ Q_OBJECT
+
+public:
+ /**
+ * Creates a new KCompositeJob object.
+ *
+ * @param parent the parent QObject
+ */
+ explicit KCompositeJob(QObject *parent = nullptr);
+
+ /**
+ * Destroys a KCompositeJob object.
+ */
+ ~KCompositeJob() override;
+
+protected:
+ /**
+ * Add a job that has to be finished before a result
+ * is emitted. This has obviously to be called before
+ * the result has been emitted by the job.
+ *
+ * Note that the composite job takes ownership of @p job
+ *
+ * @param job the subjob to add
+ * @return true if the job has been added correctly, false otherwise
+ */
+ virtual bool addSubjob(KJob *job);
+
+ /**
+ * Mark a sub job as being done.
+ *
+ * The ownership of @p job is passed on to the caller.
+ *
+ * @param job the subjob to remove
+ * @return true if the job has been removed correctly, false otherwise
+ */
+ virtual bool removeSubjob(KJob *job);
+
+ /**
+ * Checks if this job has subjobs running.
+ *
+ * @return true if we still have subjobs running, false otherwise
+ */
+ bool hasSubjobs() const;
+
+ /**
+ * Retrieves the list of the subjobs.
+ *
+ * @return the full list of sub jobs
+ */
+ const QList<KJob *> &subjobs() const;
+
+ /**
+ * Clears the list of subjobs.
+ *
+ * Note that this will *not* delete the subjobs.
+ * Ownership of the subjobs is passed on to the caller.
+ */
+ void clearSubjobs();
+
+protected Q_SLOTS:
+ /**
+ * Called whenever a subjob finishes.
+ * Default implementation checks for errors and propagates
+ * to parent job, and in all cases it calls removeSubjob.
+ *
+ * @param job the subjob
+ */
+ virtual void slotResult(KJob *job);
+
+ /**
+ * Forward signal from subjob.
+ *
+ * @param job the subjob
+ * @param plain the info message in plain text version
+ * @param rich the info message in rich text version
+ * @see infoMessage()
+ */
+ virtual void slotInfoMessage(KJob *job, const QString &plain, const QString &rich);
+
+protected:
+ KCompositeJob(KCompositeJobPrivate &dd, QObject *parent);
+private:
+ Q_DECLARE_PRIVATE(KCompositeJob)
+};
+
+#endif
--- /dev/null
+/* This file is part of the KDE project
+ Copyright (C) 2006 Kevin Ottens <ervin@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+
+*/
+
+#ifndef KCOMPOSITEJOB_P_H
+#define KCOMPOSITEJOB_P_H
+
+#include "kcompositejob.h"
+
+#include "kjob_p.h"
+
+// This is a private class, but it's exported for
+// KIO::Job's usage. Other Job classes in kdelibs may
+// use it too.
+class KCOREADDONS_EXPORT KCompositeJobPrivate: public KJobPrivate
+{
+public:
+ KCompositeJobPrivate();
+ ~KCompositeJobPrivate();
+
+ QList<KJob *> subjobs;
+
+ Q_DECLARE_PUBLIC(KCompositeJob)
+};
+
+#endif
--- /dev/null
+/* This file is part of the KDE project
+ Copyright (C) 2000 Stephan Kulow <coolo@kde.org>
+ David Faure <faure@kde.org>
+ Copyright (C) 2006 Kevin Ottens <ervin@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+
+*/
+
+#include "kjob.h"
+#include "kjob_p.h"
+
+#include "kjobuidelegate.h"
+
+#include <QEventLoop>
+#include <QMap>
+#include <QMetaType>
+#include <QTimer>
+
+KJobPrivate::KJobPrivate()
+ : q_ptr(nullptr), uiDelegate(nullptr), error(KJob::NoError),
+ progressUnit(KJob::Bytes), percentage(0),
+ speedTimer(nullptr), eventLoop(nullptr),
+ capabilities(KJob::NoCapabilities),
+ suspended(false), isAutoDelete(true), isFinished(false)
+{
+}
+
+KJobPrivate::~KJobPrivate()
+{
+}
+
+KJob::KJob(QObject *parent)
+ : QObject(parent), d_ptr(new KJobPrivate)
+{
+ d_ptr->q_ptr = this;
+}
+
+KJob::KJob(KJobPrivate &dd, QObject *parent)
+ : QObject(parent), d_ptr(&dd)
+{
+ d_ptr->q_ptr = this;
+}
+
+KJob::~KJob()
+{
+ if (!d_ptr->isFinished) {
+ emit finished(this, QPrivateSignal());
+ }
+
+ delete d_ptr->speedTimer;
+ delete d_ptr->uiDelegate;
+ delete d_ptr;
+}
+
+void KJob::setUiDelegate(KJobUiDelegate *delegate)
+{
+ Q_D(KJob);
+ if (delegate == nullptr || delegate->setJob(this)) {
+ delete d->uiDelegate;
+ d->uiDelegate = delegate;
+
+ if (d->uiDelegate) {
+ d->uiDelegate->connectJob(this);
+ }
+ }
+}
+
+KJobUiDelegate *KJob::uiDelegate() const
+{
+ return d_func()->uiDelegate;
+}
+
+KJob::Capabilities KJob::capabilities() const
+{
+ return d_func()->capabilities;
+}
+
+bool KJob::isSuspended() const
+{
+ return d_func()->suspended;
+}
+
+void KJob::finishJob(bool emitResult)
+{
+ Q_D(KJob);
+ d->isFinished = true;
+
+ if (d->eventLoop) {
+ d->eventLoop->quit();
+ }
+
+ // If we are displaying a progress dialog, remove it first.
+ emit finished(this, QPrivateSignal());
+
+ if (emitResult) {
+ emit result(this, QPrivateSignal());
+ }
+
+ if (isAutoDelete()) {
+ deleteLater();
+ }
+}
+
+bool KJob::kill(KillVerbosity verbosity)
+{
+ if (doKill()) {
+ setError(KilledJobError);
+
+ finishJob(verbosity != Quietly);
+ return true;
+ } else {
+ return false;
+ }
+}
+
+bool KJob::suspend()
+{
+ Q_D(KJob);
+ if (!d->suspended) {
+ if (doSuspend()) {
+ d->suspended = true;
+ emit suspended(this, QPrivateSignal());
+
+ return true;
+ }
+ }
+
+ return false;
+}
+
+bool KJob::resume()
+{
+ Q_D(KJob);
+ if (d->suspended) {
+ if (doResume()) {
+ d->suspended = false;
+ emit resumed(this, QPrivateSignal());
+
+ return true;
+ }
+ }
+
+ return false;
+}
+
+bool KJob::doKill()
+{
+ return false;
+}
+
+bool KJob::doSuspend()
+{
+ return false;
+}
+
+bool KJob::doResume()
+{
+ return false;
+}
+
+void KJob::setCapabilities(KJob::Capabilities capabilities)
+{
+ Q_D(KJob);
+ d->capabilities = capabilities;
+}
+
+bool KJob::exec()
+{
+ Q_D(KJob);
+ // Usually this job would delete itself, via deleteLater() just after
+ // emitting result() (unless configured otherwise). Since we use an event
+ // loop below, that event loop will process the deletion event and we'll
+ // have been deleted when exec() returns. This crashes, so temporarily
+ // suspend autodeletion and manually do it afterwards.
+ const bool wasAutoDelete = isAutoDelete();
+ setAutoDelete(false);
+
+ Q_ASSERT(! d->eventLoop);
+
+ QEventLoop loop(this);
+ d->eventLoop = &loop;
+
+ start();
+ if (!d->isFinished) {
+ d->eventLoop->exec(QEventLoop::ExcludeUserInputEvents);
+ }
+ d->eventLoop = nullptr;
+
+ if (wasAutoDelete) {
+ deleteLater();
+ }
+ return (d->error == NoError);
+}
+
+int KJob::error() const
+{
+ return d_func()->error;
+}
+
+QString KJob::errorText() const
+{
+ return d_func()->errorText;
+}
+
+QString KJob::errorString() const
+{
+ return d_func()->errorText;
+}
+
+qulonglong KJob::processedAmount(Unit unit) const
+{
+ return d_func()->processedAmount[unit];
+}
+
+qulonglong KJob::totalAmount(Unit unit) const
+{
+ return d_func()->totalAmount[unit];
+}
+
+unsigned long KJob::percent() const
+{
+ return d_func()->percentage;
+}
+
+void KJob::setError(int errorCode)
+{
+ Q_D(KJob);
+ d->error = errorCode;
+}
+
+void KJob::setErrorText(const QString &errorText)
+{
+ Q_D(KJob);
+ d->errorText = errorText;
+}
+
+void KJob::setProcessedAmount(Unit unit, qulonglong amount)
+{
+ Q_D(KJob);
+ bool should_emit = (d->processedAmount[unit] != amount);
+
+ d->processedAmount[unit] = amount;
+
+ if (should_emit) {
+ emit processedAmount(this, unit, amount);
+ if (unit == d->progressUnit) {
+ emit processedSize(this, amount);
+ emitPercent(d->processedAmount[unit], d->totalAmount[unit]);
+ }
+ }
+}
+
+void KJob::setTotalAmount(Unit unit, qulonglong amount)
+{
+ Q_D(KJob);
+ bool should_emit = (d->totalAmount[unit] != amount);
+
+ d->totalAmount[unit] = amount;
+
+ if (should_emit) {
+ emit totalAmount(this, unit, amount);
+ if (unit == d->progressUnit) {
+ emit totalSize(this, amount);
+ emitPercent(d->processedAmount[unit], d->totalAmount[unit]);
+ }
+ }
+}
+
+void KJob::setPercent(unsigned long percentage)
+{
+ Q_D(KJob);
+ if (d->percentage != percentage) {
+ d->percentage = percentage;
+ emit percent(this, percentage);
+ }
+}
+
+void KJob::emitResult()
+{
+ finishJob(true);
+}
+
+void KJob::emitPercent(qulonglong processedAmount, qulonglong totalAmount)
+{
+ Q_D(KJob);
+ // calculate percents
+ if (totalAmount) {
+ unsigned long oldPercentage = d->percentage;
+ d->percentage = 100.0 * processedAmount / totalAmount;
+ if (d->percentage != oldPercentage) {
+ emit percent(this, d->percentage);
+ }
+ }
+}
+
+void KJob::emitSpeed(unsigned long value)
+{
+ Q_D(KJob);
+ if (!d->speedTimer) {
+ d->speedTimer = new QTimer(this);
+ connect(d->speedTimer, SIGNAL(timeout()), SLOT(_k_speedTimeout()));
+ }
+
+ emit speed(this, value);
+ d->speedTimer->start(5000); // 5 seconds interval should be enough
+}
+
+void KJobPrivate::_k_speedTimeout()
+{
+ Q_Q(KJob);
+ // send 0 and stop the timer
+ // timer will be restarted only when we receive another speed event
+ emit q->speed(q, 0);
+ speedTimer->stop();
+}
+
+bool KJob::isAutoDelete() const
+{
+ Q_D(const KJob);
+ return d->isAutoDelete;
+}
+
+void KJob::setAutoDelete(bool autodelete)
+{
+ Q_D(KJob);
+ d->isAutoDelete = autodelete;
+}
+
+#include "moc_kjob.cpp"
--- /dev/null
+/* This file is part of the KDE project
+ Copyright (C) 2000 Stephan Kulow <coolo@kde.org>
+ David Faure <faure@kde.org>
+ Copyright (C) 2006 Kevin Ottens <ervin@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+
+*/
+
+#ifndef KJOB_H
+#define KJOB_H
+
+#include <kcoreaddons_export.h>
+#include <QObject>
+#include <QPair>
+
+class KJobUiDelegate;
+
+class KJobPrivate;
+/**
+ * @class KJob kjob.h KJob
+ *
+ * The base class for all jobs.
+ * For all jobs created in an application, the code looks like
+ *
+ * \code
+ * void SomeClass::methodWithAsynchronousJobCall()
+ * {
+ * KJob* job = someoperation(some parameters);
+ * connect(job, SIGNAL(result(KJob*)),
+ * this, SLOT(handleResult(KJob*)));
+ * job->start();
+ * }
+ * \endcode
+ * (other connects, specific to the job)
+ *
+ * And handleResult is usually at least:
+ *
+ * \code
+ * void SomeClass::handleResult( KJob *job )
+ * {
+ * if (job->error()) {
+ * doSomething();
+ * }
+ * }
+ * \endcode
+ *
+ * With the synchronous interface the code looks like
+ *
+ * \code
+ * void SomeClass::methodWithSynchronousJobCall()
+ * {
+ * KJob *job = someoperation( some parameters );
+ * if (!job->exec()) {
+ * // An error occurred
+ * } else {
+ * // Do something
+ * }
+ * }
+ * \endcode
+ *
+ * Subclasses must implement start(), which should trigger
+ * the execution of the job (although the work should be
+ * done asynchronously). errorString() should also be
+ * reimplemented by any subclasses that introduce new
+ * error codes.
+ *
+ * @note KJob and its subclasses are meant to be used
+ * in a fire-and-forget way. Jobs will delete themselves
+ * when they finish using deleteLater() (although this
+ * behaviour can be changed), so a job instance will
+ * disappear after the next event loop run.
+ */
+class KCOREADDONS_EXPORT KJob : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(int error READ error NOTIFY result)
+ Q_PROPERTY(QString errorText READ errorText NOTIFY result)
+ Q_PROPERTY(QString errorString READ errorString NOTIFY result)
+ Q_PROPERTY(unsigned long percent READ percent NOTIFY percent)
+ Q_PROPERTY(Capabilities capabilities READ capabilities CONSTANT)
+
+public:
+ enum Unit { Bytes, Files, Directories };
+ Q_ENUM(Unit)
+
+ enum Capability { NoCapabilities = 0x0000,
+ Killable = 0x0001,
+ Suspendable = 0x0002
+ };
+ Q_ENUM(Capability)
+
+ Q_DECLARE_FLAGS(Capabilities, Capability)
+ Q_FLAG(Capabilities)
+
+ /**
+ * Creates a new KJob object.
+ *
+ * @param parent the parent QObject
+ */
+ explicit KJob(QObject *parent = nullptr);
+
+ /**
+ * Destroys a KJob object.
+ */
+ ~KJob() override;
+
+ /**
+ * Attach a UI delegate to this job.
+ *
+ * If the job had another UI delegate, it's automatically deleted. Once
+ * attached to the job, the UI delegate will be deleted with the job.
+ *
+ * @param delegate the new UI delegate to use
+ * @see KJobUiDelegate
+ */
+ void setUiDelegate(KJobUiDelegate *delegate);
+
+ /**
+ * Retrieves the delegate attached to this job.
+ *
+ * @return the delegate attached to this job, or @c nullptr if there's no such delegate
+ */
+ KJobUiDelegate *uiDelegate() const;
+
+ /**
+ * Returns the capabilities of this job.
+ *
+ * @return the capabilities that this job supports
+ * @see setCapabilities()
+ */
+ Capabilities capabilities() const;
+
+ /**
+ * Returns if the job was suspended with the suspend() call.
+ *
+ * @return if the job was suspended
+ * @see suspend() resume()
+ */
+ bool isSuspended() const;
+
+ /**
+ * Starts the job asynchronously.
+ *
+ * When the job is finished, result() is emitted.
+ *
+ * Warning: Never implement any synchronous workload in this method. This method
+ * should just trigger the job startup, not do any work itself. It is expected to
+ * be non-blocking.
+ *
+ * This is the method all subclasses need to implement.
+ * It should setup and trigger the workload of the job. It should not do any
+ * work itself. This includes all signals and terminating the job, e.g. by
+ * emitResult(). The workload, which could be another method of the
+ * subclass, is to be triggered using the event loop, e.g. by code like:
+ * \code
+ * void ExampleJob::start()
+ * {
+ * QTimer::singleShot(0, this, SLOT(doWork()));
+ * }
+ * \endcode
+ */
+ Q_SCRIPTABLE virtual void start() = 0;
+
+ enum KillVerbosity { Quietly, EmitResult };
+ Q_ENUM(KillVerbosity)
+
+public Q_SLOTS:
+ /**
+ * Aborts this job.
+ *
+ * This kills and deletes the job.
+ *
+ * @param verbosity if equals to EmitResult, Job will emit signal result
+ * and ask uiserver to close the progress window.
+ * @p verbosity is set to EmitResult for subjobs. Whether applications
+ * should call with Quietly or EmitResult depends on whether they rely
+ * on result being emitted or not. Please notice that if @p verbosity is
+ * set to Quietly, signal result will NOT be emitted.
+ * @return true if the operation is supported and succeeded, false otherwise
+ */
+ bool kill(KillVerbosity verbosity = Quietly);
+
+ /**
+ * Suspends this job.
+ * The job should be kept in a state in which it is possible to resume it.
+ *
+ * @return true if the operation is supported and succeeded, false otherwise
+ */
+ bool suspend();
+
+ /**
+ * Resumes this job.
+ *
+ * @return true if the operation is supported and succeeded, false otherwise
+ */
+ bool resume();
+
+protected:
+ /**
+ * Aborts this job quietly.
+ *
+ * This simply kills the job, no error reporting or job deletion should be involved.
+ *
+ * @return true if the operation is supported and succeeded, false otherwise
+ */
+ virtual bool doKill();
+
+ /**
+ * Suspends this job.
+ *
+ * @return true if the operation is supported and succeeded, false otherwise
+ */
+ virtual bool doSuspend();
+
+ /**
+ * Resumes this job.
+ *
+ * @return true if the operation is supported and succeeded, false otherwise
+ */
+ virtual bool doResume();
+
+ /**
+ * Sets the capabilities for this job.
+ *
+ * @param capabilities are the capabilities supported by this job
+ * @see capabilities()
+ */
+ void setCapabilities(Capabilities capabilities);
+
+public:
+ /**
+ * Executes the job synchronously.
+ *
+ * This will start a nested QEventLoop internally. Nested event loop can be dangerous and
+ * can have unintended side effects, you should avoid calling exec() whenever you can and use the
+ * asynchronous interface of KJob instead.
+ *
+ * Should you indeed call this method, you need to make sure that all callers are reentrant,
+ * so that events delivered by the inner event loop don't cause non-reentrant functions to be
+ * called, which usually wreaks havoc.
+ *
+ * Note that the event loop started by this method does not process user input events, which means
+ * your user interface will effectively be blocked. Other events like paint or network events are
+ * still being processed. The advantage of not processing user input events is that the chance of
+ * accidental reentrance is greatly reduced. Still you should avoid calling this function.
+ *
+ * @return true if the job has been executed without error, false otherwise
+ */
+ bool exec();
+
+ enum {
+ /*** Indicates there is no error */
+ NoError = 0,
+ /*** Indicates the job was killed */
+ KilledJobError = 1,
+ /*** Subclasses should define error codes starting at this value */
+ UserDefinedError = 100
+ };
+
+ /**
+ * Returns the error code, if there has been an error.
+ *
+ * Only call this method from the slot connected to result().
+ *
+ * @return the error code for this job, 0 if no error.
+ */
+ int error() const;
+
+ /**
+ * Returns the error text if there has been an error.
+ *
+ * Only call if error is not 0.
+ *
+ * This is usually some extra data associated with the error,
+ * such as a URL. Use errorString() to get a human-readable,
+ * translated message.
+ *
+ * @return a string to help understand the error
+ */
+ QString errorText() const;
+
+ /**
+ * A human-readable error message.
+ *
+ * This provides a translated, human-readable description of the
+ * error. Only call if error is not 0.
+ *
+ * Subclasses should implement this to create a translated
+ * error message from the error code and error text.
+ * For example:
+ * \code
+ * if (error() == ReadFailed) {
+ * i18n("Could not read \"%1\"", errorText());
+ * }
+ * \endcode
+ *
+ * @return a translated error message, providing error() is 0
+ */
+ virtual QString errorString() const;
+
+ /**
+ * Returns the processed amount of a given unit for this job.
+ *
+ * @param unit the unit of the requested amount
+ * @return the processed size
+ */
+ Q_SCRIPTABLE qulonglong processedAmount(Unit unit) const;
+
+ /**
+ * Returns the total amount of a given unit for this job.
+ *
+ * @param unit the unit of the requested amount
+ * @return the total size
+ */
+ Q_SCRIPTABLE qulonglong totalAmount(Unit unit) const;
+
+ /**
+ * Returns the overall progress of this job.
+ *
+ * @return the overall progress of this job
+ */
+ unsigned long percent() const;
+
+ /**
+ * set the auto-delete property of the job. If @p autodelete is
+ * set to false the job will not delete itself once it is finished.
+ *
+ * The default for any KJob is to automatically delete itself.
+ *
+ * @param autodelete set to false to disable automatic deletion
+ * of the job.
+ */
+ void setAutoDelete(bool autodelete);
+
+ /**
+ * Returns whether this job automatically deletes itself once
+ * the job is finished.
+ *
+ * @return whether the job is deleted automatically after
+ * finishing.
+ */
+ bool isAutoDelete() const;
+
+Q_SIGNALS:
+ /**
+ * Emitted when the job is finished, in any case. It is used to notify
+ * observers that the job is terminated and that progress can be hidden.
+ *
+ * This is a private signal, it can't be emitted directly by subclasses of
+ * KJob, use emitResult() instead.
+ *
+ * In general, to be notified of a job's completion, client code should connect to result()
+ * rather than finished(), so that kill(Quietly) is indeed quiet.
+ * However if you store a list of jobs and they might get killed silently,
+ * then you must connect to this instead of result(), to avoid dangling pointers in your list.
+ *
+ * @param job the job that emitted this signal
+ * @internal
+ *
+ * @see result
+ */
+ void finished(KJob *job
+#if !defined(DOXYGEN_SHOULD_SKIP_THIS)
+ , QPrivateSignal
+#endif
+ );
+
+ /**
+ * Emitted when the job is suspended.
+ *
+ * This is a private signal, it can't be emitted directly by subclasses of
+ * KJob.
+ *
+ * @param job the job that emitted this signal
+ */
+ void suspended(KJob *job
+#if !defined(DOXYGEN_SHOULD_SKIP_THIS)
+ , QPrivateSignal
+#endif
+ );
+
+ /**
+ * Emitted when the job is resumed.
+ *
+ * This is a private signal, it can't be emitted directly by subclasses of
+ * KJob.
+ *
+ * @param job the job that emitted this signal
+ */
+ void resumed(KJob *job
+#if !defined(DOXYGEN_SHOULD_SKIP_THIS)
+ , QPrivateSignal
+#endif
+ );
+
+ /**
+ * Emitted when the job is finished (except when killed with KJob::Quietly).
+ *
+ * Use error to know if the job was finished with error.
+ *
+ * This is a private signal, it can't be emitted directly by subclasses of
+ * KJob, use emitResult() instead.
+ *
+ * Please connect to this signal instead of finished.
+ *
+ * @param job the job that emitted this signal
+ *
+ * @see kill
+ */
+ void result(KJob *job
+#if !defined(DOXYGEN_SHOULD_SKIP_THIS)
+ , QPrivateSignal
+#endif
+ );
+
+ /**
+ * Emitted to display general description of this job. A description has
+ * a title and two optional fields which can be used to complete the
+ * description.
+ *
+ * Examples of titles are "Copying", "Creating resource", etc.
+ * The fields of the description can be "Source" with an URL, and,
+ * "Destination" with an URL for a "Copying" description.
+ * @param job the job that emitted this signal
+ * @param title the general description of the job
+ * @param field1 first field (localized name and value)
+ * @param field2 second field (localized name and value)
+ */
+ void description(KJob *job, const QString &title,
+ const QPair<QString, QString> &field1 = QPair<QString, QString>(),
+ const QPair<QString, QString> &field2 = QPair<QString, QString>());
+ /**
+ * Emitted to display state information about this job.
+ * Examples of message are "Resolving host", "Connecting to host...", etc.
+ *
+ * @param job the job that emitted this signal
+ * @param plain the info message
+ * @param rich the rich text version of the message, or QString() is none is available
+ */
+ void infoMessage(KJob *job, const QString &plain, const QString &rich = QString());
+
+ /**
+ * Emitted to display a warning about this job.
+ *
+ * @param job the job that emitted this signal
+ * @param plain the warning message
+ * @param rich the rich text version of the message, or QString() is none is available
+ */
+ void warning(KJob *job, const QString &plain, const QString &rich = QString());
+
+Q_SIGNALS:
+ // These signals must be connected from KIO::KCoreDirLister (among others),
+ // therefore they must be public.
+ /**
+ * Emitted when we know the amount the job will have to process. The unit of this
+ * amount is sent too. It can be emitted several times if the job manages several
+ * different units.
+ *
+ * @note This is a private signal, it shouldn't be emitted directly by subclasses of
+ * KJob, use setTotalAmount() instead.
+ *
+ * @param job the job that emitted this signal
+ * @param unit the unit of the total amount
+ * @param amount the total amount
+ */
+ void totalAmount(KJob *job, KJob::Unit unit, qulonglong amount);
+
+ /**
+ * Regularly emitted to show the progress of this job by giving the current amount.
+ * The unit of this amount is sent too. It can be emitted several times if the job
+ * manages several different units.
+ *
+ * @note This is a private signal, it shouldn't be emitted directly by subclasses of
+ * KJob, use setProcessedAmount() instead.
+ *
+ * @param job the job that emitted this signal
+ * @param unit the unit of the processed amount
+ * @param amount the processed amount
+ */
+ void processedAmount(KJob *job, KJob::Unit unit, qulonglong amount);
+
+ /**
+ * Emitted when we know the size of this job (data size in bytes for transfers,
+ * number of entries for listings, etc).
+ *
+ * @note This is a private signal, it shouldn't be emitted directly by subclasses of
+ * KJob, use setTotalAmount() instead.
+ *
+ * @param job the job that emitted this signal
+ * @param size the total size
+ */
+ void totalSize(KJob *job, qulonglong size);
+
+ /**
+ * Regularly emitted to show the progress of this job
+ * (current data size in bytes for transfers, entries listed, etc.).
+ *
+ * @note This is a private signal, it shouldn't be emitted directly by subclasses of
+ * KJob, use setProcessedAmount() instead.
+ *
+ * @param job the job that emitted this signal
+ * @param size the processed size
+ */
+ void processedSize(KJob *job, qulonglong size);
+
+ /**
+ * Progress signal showing the overall progress of the job
+ * This is valid for any kind of job, and allows using a
+ * a progress bar very easily. (see KProgressBar).
+ * Note that this signal is not emitted for finished jobs.
+ *
+ * @note This is a private signal, it shouldn't be emitted directly by subclasses of
+ * KJob, use emitPercent(), setPercent() setTotalAmount() or
+ * setProcessedAmount() instead.
+ *
+ * @param job the job that emitted this signal
+ * @param percent the percentage
+ */
+ void percent(KJob *job, unsigned long percent);
+
+ /**
+ * Emitted to display information about the speed of this job.
+ *
+ * @note This is a private signal, it shouldn't be emitted directly by subclasses of
+ * KJob, use emitSpeed() instead.
+ *
+ * @param job the job that emitted this signal
+ * @param speed the speed in bytes/s
+ */
+ void speed(KJob *job, unsigned long speed);
+
+protected:
+ /**
+ * Sets the error code.
+ *
+ * It should be called when an error
+ * is encountered in the job, just before calling emitResult().
+ *
+ * You should define an (anonymous) enum of error codes,
+ * with values starting at KJob::UserDefinedError, and use
+ * those. For example,
+ * @code
+ * enum {
+ * InvalidFoo = UserDefinedError,
+ * BarNotFound
+ * };
+ * @endcode
+ *
+ * @param errorCode the error code
+ * @see emitResult()
+ */
+ void setError(int errorCode);
+
+ /**
+ * Sets the error text.
+ *
+ * It should be called when an error
+ * is encountered in the job, just before calling emitResult().
+ *
+ * Provides extra information about the error that cannot be
+ * determined directly from the error code. For example, a
+ * URL or filename. This string is not normally translatable.
+ *
+ * @param errorText the error text
+ * @see emitResult(), errorString(), setError()
+ */
+ void setErrorText(const QString &errorText);
+
+ /**
+ * Sets the processed size. The processedAmount() and percent() signals
+ * are emitted if the values changed. The percent() signal is emitted
+ * only for the progress unit.
+ *
+ * @param unit the unit of the new processed amount
+ * @param amount the new processed amount
+ */
+ void setProcessedAmount(Unit unit, qulonglong amount);
+
+ /**
+ * Sets the total size. The totalSize() and percent() signals
+ * are emitted if the values changed. The percent() signal is emitted
+ * only for the progress unit.
+ *
+ * @param unit the unit of the new total amount
+ * @param amount the new total amount
+ */
+ void setTotalAmount(Unit unit, qulonglong amount);
+
+ /**
+ * Sets the overall progress of the job. The percent() signal
+ * is emitted if the value changed.
+ *
+ * @param percentage the new overall progress
+ */
+ void setPercent(unsigned long percentage);
+
+ /**
+ * Utility function to emit the result signal, and suicide this job.
+ * It first notifies the observers to hide the progress for this job using
+ * the finished() signal.
+ *
+ * @note Deletes this job using deleteLater().
+ *
+ * @see result()
+ * @see finished()
+ */
+ void emitResult();
+
+ /**
+ * Utility function for inherited jobs.
+ * Emits the percent signal if bigger than previous value,
+ * after calculating it from the parameters.
+ *
+ * @param processedAmount the processed amount
+ * @param totalAmount the total amount
+ * @see percent()
+ */
+ void emitPercent(qulonglong processedAmount, qulonglong totalAmount);
+
+ /**
+ * Utility function for inherited jobs.
+ * Emits the speed signal and starts the timer for removing that info
+ *
+ * @param speed the speed in bytes/s
+ */
+ void emitSpeed(unsigned long speed);
+
+protected:
+ KJobPrivate *const d_ptr;
+ KJob(KJobPrivate &dd, QObject *parent);
+
+private:
+ void finishJob(bool emitResult);
+
+ Q_PRIVATE_SLOT(d_func(), void _k_speedTimeout())
+ Q_DECLARE_PRIVATE(KJob)
+};
+
+Q_DECLARE_METATYPE(KJob::Unit)
+Q_DECLARE_OPERATORS_FOR_FLAGS(KJob::Capabilities)
+
+#endif
--- /dev/null
+/* This file is part of the KDE project
+ Copyright (C) 2000 Stephan Kulow <coolo@kde.org>
+ David Faure <faure@kde.org>
+ Copyright (C) 2006 Kevin Ottens <ervin@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+
+*/
+
+#ifndef KJOB_P_H
+#define KJOB_P_H
+
+#include "kjob.h"
+#include <QMap>
+#include <QEventLoopLocker>
+
+class KJobUiDelegate;
+class QTimer;
+class QEventLoop;
+
+// This is a private class, but it's exported for
+// KIO::Job's usage. Other Job classes in kdelibs may
+// use it too.
+class KCOREADDONS_EXPORT KJobPrivate
+{
+public:
+ KJobPrivate();
+ virtual ~KJobPrivate();
+
+ KJob *q_ptr;
+
+ KJobUiDelegate *uiDelegate;
+ QString errorText;
+ int error;
+ KJob::Unit progressUnit;
+ QMap<KJob::Unit, qulonglong> processedAmount;
+ QMap<KJob::Unit, qulonglong> totalAmount;
+ unsigned long percentage;
+ QTimer *speedTimer;
+ QEventLoop *eventLoop;
+ // eventLoopLocker prevents QCoreApplication from exiting when the last
+ // window is closed until the job has finished running
+ QEventLoopLocker eventLoopLocker;
+ KJob::Capabilities capabilities;
+ bool suspended;
+ bool isAutoDelete;
+
+ void _k_speedTimeout();
+
+ bool isFinished;
+
+ Q_DECLARE_PUBLIC(KJob)
+};
+
+#endif
--- /dev/null
+/* This file is part of the KDE project
+ Copyright (C) 2007 Kevin Ottens <ervin@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+
+*/
+
+#include "kjobtrackerinterface.h"
+
+#include "kjob.h"
+
+class Q_DECL_HIDDEN KJobTrackerInterface::Private
+{
+public:
+ Private(KJobTrackerInterface *interface) : q(interface)
+ {
+
+ }
+
+ KJobTrackerInterface *const q;
+};
+
+KJobTrackerInterface::KJobTrackerInterface(QObject *parent)
+ : QObject(parent), d(new Private(this))
+{
+ qRegisterMetaType<QPair<QString,QString>>();
+}
+
+KJobTrackerInterface::~KJobTrackerInterface()
+{
+ delete d;
+}
+
+void KJobTrackerInterface::registerJob(KJob *job)
+{
+ QObject::connect(job, SIGNAL(finished(KJob*)),
+ this, SLOT(unregisterJob(KJob*)));
+ QObject::connect(job, SIGNAL(finished(KJob*)),
+ this, SLOT(finished(KJob*)));
+
+ QObject::connect(job, SIGNAL(suspended(KJob*)),
+ this, SLOT(suspended(KJob*)));
+ QObject::connect(job, SIGNAL(resumed(KJob*)),
+ this, SLOT(resumed(KJob*)));
+
+ QObject::connect(job, SIGNAL(description(KJob *, const QString &,
+ const QPair<QString, QString> &,
+ const QPair<QString, QString> &)),
+ this, SLOT(description(KJob *, const QString &,
+ const QPair<QString, QString> &,
+ const QPair<QString, QString> &)));
+ QObject::connect(job, SIGNAL(infoMessage(KJob*,QString,QString)),
+ this, SLOT(infoMessage(KJob*,QString,QString)));
+ QObject::connect(job, SIGNAL(warning(KJob*,QString,QString)),
+ this, SLOT(warning(KJob*,QString,QString)));
+
+ QObject::connect(job, SIGNAL(totalAmount(KJob*,KJob::Unit,qulonglong)),
+ this, SLOT(totalAmount(KJob*,KJob::Unit,qulonglong)));
+ QObject::connect(job, SIGNAL(processedAmount(KJob*,KJob::Unit,qulonglong)),
+ this, SLOT(processedAmount(KJob*,KJob::Unit,qulonglong)));
+ QObject::connect(job, SIGNAL(percent(KJob*,ulong)),
+ this, SLOT(percent(KJob*,ulong)));
+ QObject::connect(job, SIGNAL(speed(KJob*,ulong)),
+ this, SLOT(speed(KJob*,ulong)));
+}
+
+void KJobTrackerInterface::unregisterJob(KJob *job)
+{
+ job->disconnect(this);
+}
+
+void KJobTrackerInterface::finished(KJob *job)
+{
+ Q_UNUSED(job)
+}
+
+void KJobTrackerInterface::suspended(KJob *job)
+{
+ Q_UNUSED(job)
+}
+
+void KJobTrackerInterface::resumed(KJob *job)
+{
+ Q_UNUSED(job)
+}
+
+void KJobTrackerInterface::description(KJob *job, const QString &title,
+ const QPair<QString, QString> &field1,
+ const QPair<QString, QString> &field2)
+{
+ Q_UNUSED(job)
+ Q_UNUSED(title)
+ Q_UNUSED(field1)
+ Q_UNUSED(field2)
+
+}
+
+void KJobTrackerInterface::infoMessage(KJob *job, const QString &plain, const QString &rich)
+{
+ Q_UNUSED(job)
+ Q_UNUSED(plain)
+ Q_UNUSED(rich)
+}
+
+void KJobTrackerInterface::warning(KJob *job, const QString &plain, const QString &rich)
+{
+ Q_UNUSED(job)
+ Q_UNUSED(plain)
+ Q_UNUSED(rich)
+}
+
+void KJobTrackerInterface::totalAmount(KJob *job, KJob::Unit unit, qulonglong amount)
+{
+ Q_UNUSED(job)
+ Q_UNUSED(unit)
+ Q_UNUSED(amount)
+}
+
+void KJobTrackerInterface::processedAmount(KJob *job, KJob::Unit unit, qulonglong amount)
+{
+ Q_UNUSED(job)
+ Q_UNUSED(unit)
+ Q_UNUSED(amount)
+}
+
+void KJobTrackerInterface::percent(KJob *job, unsigned long percent)
+{
+ Q_UNUSED(job)
+ Q_UNUSED(percent)
+}
+
+void KJobTrackerInterface::speed(KJob *job, unsigned long value)
+{
+ Q_UNUSED(job)
+ Q_UNUSED(value)
+}
+
+#include "moc_kjobtrackerinterface.cpp"
--- /dev/null
+/* This file is part of the KDE project
+ Copyright (C) 2007 Kevin Ottens <ervin@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+
+*/
+
+#ifndef KJOBTRACKERINTERFACE_H
+#define KJOBTRACKERINTERFACE_H
+
+#include <kcoreaddons_export.h>
+#include <kjob.h>
+
+#include <QObject>
+#include <QPair>
+
+/**
+ * @class KJobTrackerInterface kjobtrackerinterface.h KJobTrackerInterface
+ *
+ * The interface to implement to track the progresses of a job.
+ */
+class KCOREADDONS_EXPORT KJobTrackerInterface : public QObject
+{
+ Q_OBJECT
+
+public:
+ /**
+ * Creates a new KJobTrackerInterface
+ *
+ * @param parent the parent object
+ */
+ explicit KJobTrackerInterface(QObject *parent = nullptr);
+
+ /**
+ * Destroys a KJobTrackerInterface
+ */
+ ~KJobTrackerInterface() override;
+
+public Q_SLOTS:
+ /**
+ * Register a new job in this tracker.
+ * The default implementation connects the following KJob signals
+ * to the respective protected slots of this class:
+ * - finished() (also connected to the unregisterJob() slot)
+ * - suspended()
+ * - resumed()
+ * - description()
+ * - infoMessage()
+ * - totalAmount()
+ * - processedAmount()
+ * - percent()
+ * - speed()
+ *
+ * If you re-implement this method, you may want to call the default
+ * implementation or add at least:
+ *
+ * @code
+ * connect(job, &KJob::finished, this, &MyJobTracker::unregisterJob);
+ * @endcode
+ *
+ * so that you won't have to manually call unregisterJob().
+ *
+ * @param job the job to register
+ * @see unregisterJob()
+ */
+ virtual void registerJob(KJob *job);
+
+ /**
+ * Unregister a job from this tracker.
+ * @note You need to manually call this method only if you re-implemented
+ * registerJob() without connecting KJob::finished to this slot.
+ *
+ * @param job the job to unregister
+ * @see registerJob()
+ */
+ virtual void unregisterJob(KJob *job);
+
+protected Q_SLOTS:
+ /**
+ * Called when a job is finished, in any case. It is used to notify
+ * that the job is terminated and that progress UI (if any) can be hidden.
+ *
+ * @param job the job that emitted this signal
+ */
+ virtual void finished(KJob *job);
+
+ /**
+ * Called when a job is suspended.
+ *
+ * @param job the job that emitted this signal
+ */
+ virtual void suspended(KJob *job);
+
+ /**
+ * Called when a job is resumed.
+ *
+ * @param job the job that emitted this signal
+ */
+ virtual void resumed(KJob *job);
+
+ /**
+ * Called to display general description of a job. A description has
+ * a title and two optional fields which can be used to complete the
+ * description.
+ *
+ * Examples of titles are "Copying", "Creating resource", etc.
+ * The fields of the description can be "Source" with an URL, and,
+ * "Destination" with an URL for a "Copying" description.
+ * @param job the job that emitted this signal
+ * @param title the general description of the job
+ * @param field1 first field (localized name and value)
+ * @param field2 second field (localized name and value)
+ */
+ virtual void description(KJob *job, const QString &title,
+ const QPair<QString, QString> &field1,
+ const QPair<QString, QString> &field2);
+
+ /**
+ * Called to display state information about a job.
+ * Examples of message are "Resolving host", "Connecting to host...", etc.
+ *
+ * @param job the job that emitted this signal
+ * @param plain the info message
+ * @param rich the rich text version of the message, or QString() is none is available
+ */
+ virtual void infoMessage(KJob *job, const QString &plain, const QString &rich);
+
+ /**
+ * Emitted to display a warning about a job.
+ *
+ * @param job the job that emitted this signal
+ * @param plain the warning message
+ * @param rich the rich text version of the message, or QString() is none is available
+ */
+ virtual void warning(KJob *job, const QString &plain, const QString &rich);
+
+ /**
+ * Called when we know the amount a job will have to process. The unit of this
+ * amount is provided too. It can be called several times for a given job if the job
+ * manages several different units.
+ *
+ * @param job the job that emitted this signal
+ * @param unit the unit of the total amount
+ * @param amount the total amount
+ */
+ virtual void totalAmount(KJob *job, KJob::Unit unit, qulonglong amount);
+
+ /**
+ * Regularly called to show the progress of a job by giving the current amount.
+ * The unit of this amount is provided too. It can be called several times for a given
+ * job if the job manages several different units.
+ *
+ * @param job the job that emitted this signal
+ * @param unit the unit of the processed amount
+ * @param amount the processed amount
+ */
+ virtual void processedAmount(KJob *job, KJob::Unit unit, qulonglong amount);
+
+ /**
+ * Called to show the overall progress of the job.
+ * Note that this is not called for finished jobs.
+ *
+ * @param job the job that emitted this signal
+ * @param percent the percentage
+ */
+ virtual void percent(KJob *job, unsigned long percent);
+
+ /**
+ * Called to show the speed of the job.
+ *
+ * @param job the job that emitted this signal
+ * @param value the current speed of the job
+ */
+ virtual void speed(KJob *job, unsigned long value);
+
+private:
+ class Private;
+ Private *const d;
+};
+
+#endif
--- /dev/null
+/* This file is part of the KDE libraries
+ Copyright (C) 2000 Stephan Kulow <coolo@kde.org>
+ David Faure <faure@kde.org>
+ Copyright (C) 2006 Kevin Ottens <ervin@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include "kjobuidelegate.h"
+#include "kjob.h"
+
+class Q_DECL_HIDDEN KJobUiDelegate::Private
+{
+public:
+ Private(KJobUiDelegate *delegate)
+ : q(delegate), job(nullptr),
+ autoErrorHandling(false),
+ autoWarningHandling(true) { }
+
+ KJobUiDelegate *const q;
+
+ KJob *job;
+ bool autoErrorHandling : 1;
+ bool autoWarningHandling : 1;
+
+ void connectJob(KJob *job);
+ void _k_result();
+};
+
+KJobUiDelegate::KJobUiDelegate()
+ : QObject(), d(new Private(this))
+{
+
+}
+
+KJobUiDelegate::~KJobUiDelegate()
+{
+ delete d;
+}
+
+bool KJobUiDelegate::setJob(KJob *job)
+{
+ if (d->job != nullptr) {
+ return false;
+ }
+
+ d->job = job;
+ setParent(job);
+
+ return true;
+}
+
+KJob *KJobUiDelegate::job() const
+{
+ return d->job;
+}
+
+void KJobUiDelegate::showErrorMessage()
+{
+}
+
+void KJobUiDelegate::setAutoErrorHandlingEnabled(bool enable)
+{
+ d->autoErrorHandling = enable;
+}
+
+bool KJobUiDelegate::isAutoErrorHandlingEnabled() const
+{
+ return d->autoErrorHandling;
+}
+
+void KJobUiDelegate::setAutoWarningHandlingEnabled(bool enable)
+{
+ d->autoWarningHandling = enable;
+}
+
+bool KJobUiDelegate::isAutoWarningHandlingEnabled() const
+{
+ return d->autoWarningHandling;
+}
+
+void KJobUiDelegate::slotWarning(KJob *job, const QString &plain,
+ const QString &rich)
+{
+ Q_UNUSED(job)
+ Q_UNUSED(plain)
+ Q_UNUSED(rich)
+}
+
+void KJobUiDelegate::connectJob(KJob *job)
+{
+ connect(job, &KJob::result, this, [this](){ d->_k_result();} );
+ connect(job, &KJob::warning, this, &KJobUiDelegate::slotWarning);
+}
+
+void KJobUiDelegate::Private::_k_result()
+{
+ if (job->error() && autoErrorHandling) {
+ q->showErrorMessage();
+ }
+}
+
+#include "moc_kjobuidelegate.cpp"
--- /dev/null
+/* This file is part of the KDE libraries
+ Copyright (C) 2000 Stephan Kulow <coolo@kde.org>
+ David Faure <faure@kde.org>
+ Copyright (C) 2006 Kevin Ottens <ervin@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef KJOBUIDELEGATE_H
+#define KJOBUIDELEGATE_H
+
+#include <kcoreaddons_export.h>
+#include <QObject>
+
+class KJob;
+
+/**
+ * @class KJobUiDelegate kjobuidelegate.h KJobUiDelegate
+ *
+ * The base class for all KJob UI delegate.
+ *
+ * A UI delegate is responsible for the events of a
+ * job and provides a UI for them (an error message
+ * box or warning etc.).
+ *
+ * @see KJob
+ */
+class KCOREADDONS_EXPORT KJobUiDelegate : public QObject
+{
+ Q_OBJECT
+
+public:
+ /**
+ * Constructs a new KJobUiDelegate.
+ */
+ KJobUiDelegate();
+
+ /**
+ * Destroys a KJobUiDelegate.
+ */
+ ~KJobUiDelegate() override;
+
+protected:
+ /**
+ * Attach this UI delegate to a job. Once attached it'll track the job events.
+ *
+ * @return true if the job we're correctly attached to the job, false otherwise.
+ */
+ virtual bool setJob(KJob *job);
+
+protected:
+ /**
+ * Retrieves the current job this UI delegate is attached to.
+ *
+ * @return current job this UI delegate is attached to, or @c nullptr if
+ * this UI delegate is not tracking any job
+ */
+ KJob *job() const;
+
+ friend class KJob;
+
+public:
+ /**
+ * Display a dialog box to inform the user of the error given by
+ * this job.
+ * Only call if error is not 0, and only in the slot connected
+ * to result.
+ */
+ virtual void showErrorMessage();
+
+ /**
+ * Enable or disable the automatic error handling. When automatic
+ * error handling is enabled and an error occurs, then showErrorDialog()
+ * is called, right before the emission of the result signal.
+ *
+ * The default is false.
+ *
+ * See also isAutoErrorHandlingEnabled , showErrorDialog
+ *
+ * @param enable enable or disable automatic error handling
+ * @see isAutoErrorHandlingEnabled()
+ */
+ void setAutoErrorHandlingEnabled(bool enable);
+
+ /**
+ * Returns whether automatic error handling is enabled or disabled.
+ * See also setAutoErrorHandlingEnabled .
+ * @return true if automatic error handling is enabled
+ * @see setAutoErrorHandlingEnabled()
+ */
+ bool isAutoErrorHandlingEnabled() const;
+
+ /**
+ * Enable or disable the automatic warning handling. When automatic
+ * warning handling is enabled and an error occurs, then a message box
+ * is displayed with the warning message
+ *
+ * The default is true.
+ *
+ * See also isAutoWarningHandlingEnabled , showErrorDialog
+ *
+ * @param enable enable or disable automatic warning handling
+ * @see isAutoWarningHandlingEnabled()
+ */
+ void setAutoWarningHandlingEnabled(bool enable);
+
+ /**
+ * Returns whether automatic warning handling is enabled or disabled.
+ * See also setAutoWarningHandlingEnabled .
+ * @return true if automatic warning handling is enabled
+ * @see setAutoWarningHandlingEnabled()
+ */
+ bool isAutoWarningHandlingEnabled() const;
+
+protected Q_SLOTS:
+ virtual void slotWarning(KJob *job, const QString &plain, const QString &rich);
+
+private:
+ void connectJob(KJob *job);
+
+ class Private;
+ Private *const d;
+};
+
+#endif // KJOBUIDELEGATE_H
--- /dev/null
+/*
+ * This file is part of the KDE Libraries
+ * Copyright (C) 2000 Espen Sand (espen@kde.org)
+ * Copyright (C) 2006 Nicolas GOUTTE <goutte@kde.org>
+ * Copyright (C) 2008 Friedrich W. H. Kossebau <kossebau@kde.org>
+ * Copyright (C) 2010 Teo Mrnjavac <teo@kde.org>
+ * Copyright (C) 2017 Harald Sitter <sitter@kde.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "kaboutdata.h"
+#include "kpluginmetadata.h"
+
+#include <QCoreApplication>
+#include <QStandardPaths>
+#include <QFile>
+#include <QTextStream>
+#include <QSharedData>
+#include <QList>
+#include <QUrl>
+#include <QHash>
+#include <QCommandLineParser>
+#include <QCommandLineOption>
+#include <QJsonObject>
+#include <QLoggingCategory>
+
+#include <algorithm>
+
+
+Q_DECLARE_LOGGING_CATEGORY(KABOUTDATA)
+// logging category for this framework, default: log stuff >= warning
+Q_LOGGING_CATEGORY(KABOUTDATA, "kf5.kcoreaddons.kaboutdata", QtWarningMsg)
+
+
+class Q_DECL_HIDDEN KAboutPerson::Private
+{
+public:
+ QString _name;
+ QString _task;
+ QString _emailAddress;
+ QString _webAddress;
+ QString _ocsUsername;
+};
+
+KAboutPerson::KAboutPerson(const QString &_name,
+ const QString &_task,
+ const QString &_emailAddress,
+ const QString &_webAddress,
+ const QString &_ocsUsername)
+ : d(new Private)
+{
+ d->_name = _name;
+ d->_task = _task;
+ d->_emailAddress = _emailAddress;
+ d->_webAddress = _webAddress;
+ d->_ocsUsername = _ocsUsername;
+}
+
+KAboutPerson::KAboutPerson(const QString &_name, const QString &_email, bool)
+ : d(new Private)
+{
+ d->_name = _name;
+ d->_emailAddress = _email;
+}
+
+KAboutPerson::KAboutPerson(const KAboutPerson &other): d(new Private)
+{
+ *d = *other.d;
+}
+
+KAboutPerson::~KAboutPerson()
+{
+ delete d;
+}
+
+QString KAboutPerson::name() const
+{
+ return d->_name;
+}
+
+QString KAboutPerson::task() const
+{
+ return d->_task;
+}
+
+QString KAboutPerson::emailAddress() const
+{
+ return d->_emailAddress;
+}
+
+QString KAboutPerson::webAddress() const
+{
+ return d->_webAddress;
+}
+
+QString KAboutPerson::ocsUsername() const
+{
+ return d->_ocsUsername;
+}
+
+KAboutPerson &KAboutPerson::operator=(const KAboutPerson &other)
+{
+ *d = *other.d;
+ return *this;
+}
+
+KAboutPerson KAboutPerson::fromJSON(const QJsonObject &obj)
+{
+ const QString name = KPluginMetaData::readTranslatedString(obj, QStringLiteral("Name"));
+ const QString task = KPluginMetaData::readTranslatedString(obj, QStringLiteral("Task"));
+ const QString email = obj[QStringLiteral("Email")].toString();
+ const QString website = obj[QStringLiteral("Website")].toString();
+ const QString userName = obj[QStringLiteral("UserName")].toString();
+ return KAboutPerson(name, task, email, website, userName);
+}
+
+
+class Q_DECL_HIDDEN KAboutLicense::Private : public QSharedData
+{
+public:
+ Private(LicenseKey licenseType,
+ VersionRestriction versionRestriction,
+ const KAboutData *aboutData);
+ Private(const Private &other);
+
+ QString spdxID() const;
+
+ LicenseKey _licenseKey;
+ QString _licenseText;
+ QString _pathToLicenseTextFile;
+ VersionRestriction _versionRestriction;
+ // needed for access to the possibly changing copyrightStatement()
+ const KAboutData *_aboutData;
+};
+
+KAboutLicense::Private::Private(LicenseKey licenseType,
+ VersionRestriction versionRestriction,
+ const KAboutData *aboutData)
+ : QSharedData(),
+ _licenseKey(licenseType),
+ _versionRestriction(versionRestriction),
+ _aboutData(aboutData)
+{
+}
+
+KAboutLicense::Private::Private(const KAboutLicense::Private &other)
+ : QSharedData(other),
+ _licenseKey(other._licenseKey),
+ _licenseText(other._licenseText),
+ _pathToLicenseTextFile(other._pathToLicenseTextFile),
+ _versionRestriction(other._versionRestriction),
+ _aboutData(other._aboutData)
+{}
+
+QString KAboutLicense::Private::spdxID() const
+{
+ switch (_licenseKey) {
+ case KAboutLicense::GPL_V2:
+ return QStringLiteral("GPL-2.0");
+ case KAboutLicense::LGPL_V2:
+ return QStringLiteral("LGPL-2.0");
+ case KAboutLicense::BSDL:
+ return QStringLiteral("BSD-2-Clause");
+ case KAboutLicense::Artistic:
+ return QStringLiteral("Artistic-1.0");
+ case KAboutLicense::QPL_V1_0:
+ return QStringLiteral("QPL-1.0");
+ case KAboutLicense::GPL_V3:
+ return QStringLiteral("GPL-3.0");
+ case KAboutLicense::LGPL_V3:
+ return QStringLiteral("LGPL-3.0");
+ case KAboutLicense::LGPL_V2_1:
+ return QStringLiteral("LGPL-2.1");
+ case KAboutLicense::Custom:
+ case KAboutLicense::File:
+ case KAboutLicense::Unknown:
+ return QString();
+ }
+ return QString();
+}
+
+KAboutLicense::KAboutLicense()
+ : d(new Private(Unknown, {}, nullptr))
+{}
+
+
+KAboutLicense::KAboutLicense(LicenseKey licenseType,
+ VersionRestriction versionRestriction,
+ const KAboutData *aboutData)
+ : d(new Private(licenseType, versionRestriction, aboutData))
+{
+
+}
+
+KAboutLicense::KAboutLicense(LicenseKey licenseType, const KAboutData *aboutData)
+ : d(new Private(licenseType, OnlyThisVersion, aboutData))
+{
+}
+
+KAboutLicense::KAboutLicense(const KAboutData *aboutData)
+ : d(new Private(Unknown, OnlyThisVersion, aboutData))
+{
+}
+
+KAboutLicense::KAboutLicense(const KAboutLicense &other)
+ : d(other.d)
+{
+}
+
+KAboutLicense::~KAboutLicense()
+{}
+
+void KAboutLicense::setLicenseFromPath(const QString &pathToFile)
+{
+ d->_licenseKey = KAboutLicense::File;
+ d->_pathToLicenseTextFile = pathToFile;
+}
+
+void KAboutLicense::setLicenseFromText(const QString &licenseText)
+{
+ d->_licenseKey = KAboutLicense::Custom;
+ d->_licenseText = licenseText;
+}
+
+QString KAboutLicense::text() const
+{
+ QString result;
+
+ const QString lineFeed = QStringLiteral("\n\n");
+
+ if (d->_aboutData && !d->_aboutData->copyrightStatement().isEmpty()) {
+ result = d->_aboutData->copyrightStatement() + lineFeed;
+ }
+
+ bool knownLicense = false;
+ QString pathToFile; // rel path if known license
+ switch (d->_licenseKey) {
+ case KAboutLicense::File:
+ pathToFile = d->_pathToLicenseTextFile;
+ break;
+ case KAboutLicense::GPL_V2:
+ knownLicense = true;
+ pathToFile = QStringLiteral("GPL_V2");
+ break;
+ case KAboutLicense::LGPL_V2:
+ knownLicense = true;
+ pathToFile = QStringLiteral("LGPL_V2");
+ break;
+ case KAboutLicense::BSDL:
+ knownLicense = true;
+ pathToFile = QStringLiteral("BSD");
+ break;
+ case KAboutLicense::Artistic:
+ knownLicense = true;
+ pathToFile = QStringLiteral("ARTISTIC");
+ break;
+ case KAboutLicense::QPL_V1_0:
+ knownLicense = true;
+ pathToFile = QStringLiteral("QPL_V1.0");
+ break;
+ case KAboutLicense::GPL_V3:
+ knownLicense = true;
+ pathToFile = QStringLiteral("GPL_V3");
+ break;
+ case KAboutLicense::LGPL_V3:
+ knownLicense = true;
+ pathToFile = QStringLiteral("LGPL_V3");
+ break;
+ case KAboutLicense::LGPL_V2_1:
+ knownLicense = true;
+ pathToFile = QStringLiteral("LGPL_V21");
+ break;
+ case KAboutLicense::Custom:
+ if (!d->_licenseText.isEmpty()) {
+ result = d->_licenseText;
+ break;
+ }
+ Q_FALLTHROUGH();
+ // fall through
+ default:
+ result += QCoreApplication::translate(
+ "KAboutLicense",
+ "No licensing terms for this program have been specified.\n"
+ "Please check the documentation or the source for any\n"
+ "licensing terms.\n");
+ }
+
+ if (knownLicense) {
+ pathToFile = QStandardPaths::locate(QStandardPaths::GenericDataLocation,
+ QString::fromLatin1("kf5/licenses/") + pathToFile);
+ result += QCoreApplication::translate(
+ "KAboutLicense",
+ "This program is distributed under the terms of the %1.").arg(name(KAboutLicense::ShortName));
+ if (!pathToFile.isEmpty()) {
+ result += lineFeed;
+ }
+ }
+
+ if (!pathToFile.isEmpty()) {
+ QFile file(pathToFile);
+ if (file.open(QIODevice::ReadOnly)) {
+ QTextStream str(&file);
+ result += str.readAll();
+ }
+ }
+
+ return result;
+}
+
+QString KAboutLicense::spdx() const
+{
+ // SPDX licenses are comprised of an identifier (e.g. GPL-2.0), an optional + to denote 'or
+ // later versions' and optional ' WITH $exception' to denote standardized exceptions from the
+ // core license. As we do not offer exceptions we effectively only return GPL-2.0 or GPL-2.0+,
+ // this may change in the future. To that end the documentation makes no assertations about the
+ // actual content of the SPDX license expression we return.
+ // Expressions can in theory also contain AND, OR and () to build constructs involving more than
+ // one license. As this is outside the scope of a single license object we'll ignore this here
+ // for now.
+ // The expecation is that the return value is only run through spec-compliant parsers, so this
+ // can potentially be changed.
+
+ auto id = d->spdxID();
+ if (id.isNull()) { // Guard against potential future changes which would allow 'Foo+' as input.
+ return id;
+ }
+ return d->_versionRestriction == OrLaterVersions ? id.append(QLatin1Char('+')) : id;
+}
+
+QString KAboutLicense::name(KAboutLicense::NameFormat formatName) const
+{
+ QString licenseShort;
+ QString licenseFull;
+
+ switch (d->_licenseKey) {
+ case KAboutLicense::GPL_V2:
+ licenseShort = QCoreApplication::translate("KAboutLicense", "GPL v2", "@item license (short name)");
+ licenseFull = QCoreApplication::translate("KAboutLicense", "GNU General Public License Version 2", "@item license");
+ break;
+ case KAboutLicense::LGPL_V2:
+ licenseShort = QCoreApplication::translate("KAboutLicense", "LGPL v2", "@item license (short name)");
+ licenseFull = QCoreApplication::translate("KAboutLicense", "GNU Lesser General Public License Version 2", "@item license");
+ break;
+ case KAboutLicense::BSDL:
+ licenseShort = QCoreApplication::translate("KAboutLicense", "BSD License", "@item license (short name)");
+ licenseFull = QCoreApplication::translate("KAboutLicense", "BSD License", "@item license");
+ break;
+ case KAboutLicense::Artistic:
+ licenseShort = QCoreApplication::translate("KAboutLicense", "Artistic License", "@item license (short name)");
+ licenseFull = QCoreApplication::translate("KAboutLicense", "Artistic License", "@item license");
+ break;
+ case KAboutLicense::QPL_V1_0:
+ licenseShort = QCoreApplication::translate("KAboutLicense", "QPL v1.0", "@item license (short name)");
+ licenseFull = QCoreApplication::translate("KAboutLicense", "Q Public License", "@item license");
+ break;
+ case KAboutLicense::GPL_V3:
+ licenseShort = QCoreApplication::translate("KAboutLicense", "GPL v3", "@item license (short name)");
+ licenseFull = QCoreApplication::translate("KAboutLicense", "GNU General Public License Version 3", "@item license");
+ break;
+ case KAboutLicense::LGPL_V3:
+ licenseShort = QCoreApplication::translate("KAboutLicense", "LGPL v3", "@item license (short name)");
+ licenseFull = QCoreApplication::translate("KAboutLicense", "GNU Lesser General Public License Version 3", "@item license");
+ break;
+ case KAboutLicense::LGPL_V2_1:
+ licenseShort = QCoreApplication::translate("KAboutLicense", "LGPL v2.1", "@item license (short name)");
+ licenseFull = QCoreApplication::translate("KAboutLicense", "GNU Lesser General Public License Version 2.1", "@item license");
+ break;
+ case KAboutLicense::Custom:
+ case KAboutLicense::File:
+ licenseShort = licenseFull = QCoreApplication::translate("KAboutLicense", "Custom", "@item license");
+ break;
+ default:
+ licenseShort = licenseFull = QCoreApplication::translate("KAboutLicense", "Not specified", "@item license");
+ }
+
+ const QString result =
+ (formatName == KAboutLicense::ShortName) ? licenseShort :
+ (formatName == KAboutLicense::FullName) ? licenseFull :
+ QString();
+
+ return result;
+}
+
+KAboutLicense &KAboutLicense::operator=(const KAboutLicense &other)
+{
+ d = other.d;
+ return *this;
+}
+
+KAboutLicense::LicenseKey KAboutLicense::key() const
+{
+ return d->_licenseKey;
+}
+
+KAboutLicense KAboutLicense::byKeyword(const QString &rawKeyword)
+{
+ // Setup keyword->enum dictionary on first call.
+ // Use normalized keywords, by the algorithm below.
+ static const QHash<QByteArray, KAboutLicense::LicenseKey> licenseDict {
+ { "gpl", KAboutLicense::GPL },
+ { "gplv2", KAboutLicense::GPL_V2 },
+ { "gplv2+", KAboutLicense::GPL_V2 },
+ { "gpl20", KAboutLicense::GPL_V2 },
+ { "gpl20+", KAboutLicense::GPL_V2 },
+ { "lgpl", KAboutLicense::LGPL },
+ { "lgplv2", KAboutLicense::LGPL_V2 },
+ { "lgplv2+", KAboutLicense::LGPL_V2 },
+ { "lgpl20", KAboutLicense::LGPL_V2 },
+ { "lgpl20+", KAboutLicense::LGPL_V2 },
+ { "bsd", KAboutLicense::BSDL },
+ { "bsd2clause", KAboutLicense::BSDL },
+ { "artistic", KAboutLicense::Artistic },
+ { "artistic10", KAboutLicense::Artistic },
+ { "qpl", KAboutLicense::QPL },
+ { "qplv1", KAboutLicense::QPL_V1_0 },
+ { "qplv10", KAboutLicense::QPL_V1_0 },
+ { "qpl10", KAboutLicense::QPL_V1_0 },
+ { "gplv3", KAboutLicense::GPL_V3 },
+ { "gplv3+", KAboutLicense::GPL_V3 },
+ { "gpl30", KAboutLicense::GPL_V3 },
+ { "gpl30+", KAboutLicense::GPL_V3 },
+ { "lgplv3", KAboutLicense::LGPL_V3 },
+ { "lgplv3+", KAboutLicense::LGPL_V3 },
+ { "lgpl30", KAboutLicense::LGPL_V3 },
+ { "lgpl30+", KAboutLicense::LGPL_V3 },
+ { "lgplv21", KAboutLicense::LGPL_V2_1 },
+ { "lgplv21+", KAboutLicense::LGPL_V2_1 },
+ { "lgpl21", KAboutLicense::LGPL_V2_1 },
+ { "lgpl21+", KAboutLicense::LGPL_V2_1 },
+ };
+
+ // Normalize keyword.
+ QString keyword = rawKeyword;
+ keyword = keyword.toLower();
+ keyword.remove(QLatin1Char(' '));
+ keyword.remove(QLatin1Char('.'));
+ keyword.remove(QLatin1Char('-'));
+
+ LicenseKey license = licenseDict.value(keyword.toLatin1(),
+ KAboutLicense::Custom);
+ auto restriction = keyword.endsWith(QLatin1Char('+')) ? OrLaterVersions : OnlyThisVersion;
+ return KAboutLicense(license, restriction, nullptr);
+}
+
+class Q_DECL_HIDDEN KAboutData::Private
+{
+public:
+ Private()
+ : customAuthorTextEnabled(false)
+ {}
+ QString _componentName;
+ QString _displayName;
+ QString _shortDescription;
+ QString _copyrightStatement;
+ QString _otherText;
+ QString _homepageAddress;
+ QList<KAboutPerson> _authorList;
+ QList<KAboutPerson> _creditList;
+ QList<KAboutPerson> _translatorList;
+ QList<KAboutLicense> _licenseList;
+ QString productName;
+ QString programIconName;
+ QVariant programLogo;
+ QString customAuthorPlainText, customAuthorRichText;
+ bool customAuthorTextEnabled;
+
+ QString organizationDomain;
+ QString _ocsProviderUrl;
+ QString desktopFileName;
+
+ // Everything dr.konqi needs, we store as utf-8, so we
+ // can just give it a pointer, w/o any allocations.
+ QByteArray _internalProgramName;
+ QByteArray _version;
+ QByteArray _bugAddress;
+
+ static QList<KAboutPerson> parseTranslators(const QString &translatorName, const QString &translatorEmail);
+
+};
+
+KAboutData::KAboutData(const QString &_componentName,
+ const QString &_displayName,
+ const QString &_version,
+ const QString &_shortDescription,
+ enum KAboutLicense::LicenseKey licenseType,
+ const QString &_copyrightStatement,
+ const QString &text,
+ const QString &homePageAddress,
+ const QString &bugAddress
+ )
+ : d(new Private)
+{
+ d->_componentName = _componentName;
+ int p = d->_componentName.indexOf(QLatin1Char('/'));
+ if (p >= 0) {
+ d->_componentName = d->_componentName.mid(p + 1);
+ }
+
+ d->_displayName = _displayName;
+ if (!d->_displayName.isEmpty()) { // KComponentData("klauncher") gives empty program name
+ d->_internalProgramName = _displayName.toUtf8();
+ }
+ d->_version = _version.toUtf8();
+ d->_shortDescription = _shortDescription;
+ d->_licenseList.append(KAboutLicense(licenseType, this));
+ d->_copyrightStatement = _copyrightStatement;
+ d->_otherText = text;
+ d->_homepageAddress = homePageAddress;
+ d->_bugAddress = bugAddress.toUtf8();
+
+ QUrl homePageUrl(homePageAddress);
+ if (!homePageUrl.isValid() || homePageUrl.scheme().isEmpty()) {
+ // Default domain if nothing else is better
+ homePageUrl.setUrl(QStringLiteral("https://kde.org/"));
+ }
+
+ const QChar dotChar(QLatin1Char('.'));
+ QStringList hostComponents = homePageUrl.host().split(dotChar);
+
+ // Remove leading component unless 2 (or less) components are present
+ if (hostComponents.size() > 2) {
+ hostComponents.removeFirst();
+ }
+
+ d->organizationDomain = hostComponents.join(dotChar);
+
+ // KF6: do not set a default desktopFileName value here, but remove this code and leave it empty
+ // see KAboutData::desktopFileName() for details
+
+ // desktop file name is reverse domain name
+ std::reverse(hostComponents.begin(), hostComponents.end());
+ hostComponents.append(_componentName);
+
+ d->desktopFileName = hostComponents.join(dotChar);
+}
+
+KAboutData::KAboutData(const QString &_componentName,
+ const QString &_displayName,
+ const QString &_version
+ )
+ : d(new Private)
+{
+ d->_componentName = _componentName;
+ int p = d->_componentName.indexOf(QLatin1Char('/'));
+ if (p >= 0) {
+ d->_componentName = d->_componentName.mid(p + 1);
+ }
+
+ d->_displayName = _displayName;
+ if (!d->_displayName.isEmpty()) { // KComponentData("klauncher") gives empty program name
+ d->_internalProgramName = _displayName.toUtf8();
+ }
+ d->_version = _version.toUtf8();
+
+ // match behaviour of other constructors
+ d->_licenseList.append(KAboutLicense(KAboutLicense::Unknown, this));
+ d->_bugAddress = "submit@bugs.kde.org";
+ d->organizationDomain = QStringLiteral("kde.org");
+ // KF6: do not set a default desktopFileName value here, but remove this code and leave it empty
+ // see KAboutData::desktopFileName() for details
+ d->desktopFileName = QStringLiteral("org.kde.%1").arg(d->_componentName);
+}
+
+KAboutData::~KAboutData()
+{
+ delete d;
+}
+
+KAboutData::KAboutData(const KAboutData &other): d(new Private)
+{
+ *d = *other.d;
+ QList<KAboutLicense>::iterator it = d->_licenseList.begin(), itEnd = d->_licenseList.end();
+ for (; it != itEnd; ++it) {
+ KAboutLicense &al = *it;
+ al.d.detach();
+ al.d->_aboutData = this;
+ }
+}
+
+KAboutData &KAboutData::operator=(const KAboutData &other)
+{
+ if (this != &other) {
+ *d = *other.d;
+ QList<KAboutLicense>::iterator it = d->_licenseList.begin(), itEnd = d->_licenseList.end();
+ for (; it != itEnd; ++it) {
+ KAboutLicense &al = *it;
+ al.d.detach();
+ al.d->_aboutData = this;
+ }
+ }
+ return *this;
+}
+
+KAboutData KAboutData::fromPluginMetaData(const KPluginMetaData &plugin)
+{
+ KAboutData ret(plugin.pluginId(), plugin.name(), plugin.version(), plugin.description(),
+ KAboutLicense::byKeyword(plugin.license()).key(), plugin.copyrightText(),
+ plugin.extraInformation(), plugin.website());
+ ret.d->programIconName = plugin.iconName();
+ ret.d->_authorList = plugin.authors();
+ ret.d->_translatorList = plugin.translators();
+ ret.d->_creditList = plugin.otherContributors();
+ return ret;
+}
+
+
+KAboutData &KAboutData::addAuthor(const QString &name,
+ const QString &task,
+ const QString &emailAddress,
+ const QString &webAddress,
+ const QString &ocsUsername)
+{
+ d->_authorList.append(KAboutPerson(name, task, emailAddress, webAddress, ocsUsername));
+ return *this;
+}
+
+KAboutData &KAboutData::addCredit(const QString &name,
+ const QString &task,
+ const QString &emailAddress,
+ const QString &webAddress,
+ const QString &ocsUsername)
+{
+ d->_creditList.append(KAboutPerson(name, task, emailAddress, webAddress, ocsUsername));
+ return *this;
+}
+
+KAboutData &KAboutData::setTranslator(const QString &name,
+ const QString &emailAddress)
+{
+ d->_translatorList = Private::parseTranslators(name, emailAddress);
+ return *this;
+}
+
+KAboutData &KAboutData::setLicenseText(const QString &licenseText)
+{
+ d->_licenseList[0] = KAboutLicense(this);
+ d->_licenseList[0].setLicenseFromText(licenseText);
+ return *this;
+}
+
+KAboutData &KAboutData::addLicenseText(const QString &licenseText)
+{
+ // if the default license is unknown, overwrite instead of append
+ KAboutLicense &firstLicense = d->_licenseList[0];
+ KAboutLicense newLicense(this);
+ newLicense.setLicenseFromText(licenseText);
+ if (d->_licenseList.count() == 1 && firstLicense.d->_licenseKey == KAboutLicense::Unknown) {
+ firstLicense = newLicense;
+ } else {
+ d->_licenseList.append(newLicense);
+ }
+
+ return *this;
+}
+
+KAboutData &KAboutData::setLicenseTextFile(const QString &pathToFile)
+{
+ d->_licenseList[0] = KAboutLicense(this);
+ d->_licenseList[0].setLicenseFromPath(pathToFile);
+ return *this;
+}
+
+KAboutData &KAboutData::addLicenseTextFile(const QString &pathToFile)
+{
+ // if the default license is unknown, overwrite instead of append
+ KAboutLicense &firstLicense = d->_licenseList[0];
+ KAboutLicense newLicense(this);
+ newLicense.setLicenseFromPath(pathToFile);
+ if (d->_licenseList.count() == 1 && firstLicense.d->_licenseKey == KAboutLicense::Unknown) {
+ firstLicense = newLicense;
+ } else {
+ d->_licenseList.append(newLicense);
+ }
+ return *this;
+}
+
+KAboutData &KAboutData::setComponentName(const QString &componentName)
+{
+ d->_componentName = componentName;
+ return *this;
+}
+
+KAboutData &KAboutData::setDisplayName(const QString &_displayName)
+{
+ d->_displayName = _displayName;
+ d->_internalProgramName = _displayName.toUtf8();
+ return *this;
+}
+
+KAboutData &KAboutData::setOcsProvider(const QString &_ocsProviderUrl)
+{
+ d->_ocsProviderUrl = _ocsProviderUrl;
+ return *this;
+}
+
+KAboutData &KAboutData::setVersion(const QByteArray &_version)
+{
+ d->_version = _version;
+ return *this;
+}
+
+KAboutData &KAboutData::setShortDescription(const QString &_shortDescription)
+{
+ d->_shortDescription = _shortDescription;
+ return *this;
+}
+
+KAboutData &KAboutData::setLicense(KAboutLicense::LicenseKey licenseKey)
+{
+ return setLicense(licenseKey, KAboutLicense::OnlyThisVersion);
+}
+
+KAboutData &KAboutData::setLicense(KAboutLicense::LicenseKey licenseKey,
+ KAboutLicense::VersionRestriction versionRestriction)
+{
+ d->_licenseList[0] = KAboutLicense(licenseKey, versionRestriction, this);
+ return *this;
+}
+
+KAboutData &KAboutData::addLicense(KAboutLicense::LicenseKey licenseKey)
+{
+ return addLicense(licenseKey, KAboutLicense::OnlyThisVersion);
+}
+
+KAboutData &KAboutData::addLicense(KAboutLicense::LicenseKey licenseKey,
+ KAboutLicense::VersionRestriction versionRestriction)
+{
+ // if the default license is unknown, overwrite instead of append
+ KAboutLicense &firstLicense = d->_licenseList[0];
+ if (d->_licenseList.count() == 1 && firstLicense.d->_licenseKey == KAboutLicense::Unknown) {
+ firstLicense = KAboutLicense(licenseKey, versionRestriction, this);
+ } else {
+ d->_licenseList.append(KAboutLicense(licenseKey, versionRestriction, this));
+ }
+ return *this;
+}
+
+KAboutData &KAboutData::setCopyrightStatement(const QString &_copyrightStatement)
+{
+ d->_copyrightStatement = _copyrightStatement;
+ return *this;
+}
+
+KAboutData &KAboutData::setOtherText(const QString &_otherText)
+{
+ d->_otherText = _otherText;
+ return *this;
+}
+
+KAboutData &KAboutData::setHomepage(const QString &homepage)
+{
+ d->_homepageAddress = homepage;
+ return *this;
+}
+
+KAboutData &KAboutData::setBugAddress(const QByteArray &_bugAddress)
+{
+ d->_bugAddress = _bugAddress;
+ return *this;
+}
+
+KAboutData &KAboutData::setOrganizationDomain(const QByteArray &domain)
+{
+ d->organizationDomain = QString::fromLatin1(domain.data());
+ return *this;
+}
+
+KAboutData &KAboutData::setProductName(const QByteArray &_productName)
+{
+ d->productName = QString::fromUtf8(_productName.data());
+ return *this;
+}
+
+QString KAboutData::componentName() const
+{
+ return d->_componentName;
+}
+
+QString KAboutData::productName() const
+{
+ if (!d->productName.isEmpty()) {
+ return d->productName;
+ }
+ return componentName();
+}
+
+QString KAboutData::displayName() const
+{
+ if (!d->_displayName.isEmpty()) {
+ return d->_displayName;
+ }
+ return componentName();
+}
+
+/// @internal
+/// Return the program name. It is always pre-allocated.
+/// Needed for KCrash in particular.
+const char *KAboutData::internalProgramName() const
+{
+ return d->_internalProgramName.constData();
+}
+
+QString KAboutData::programIconName() const
+{
+ return d->programIconName.isEmpty() ? componentName() : d->programIconName;
+}
+
+KAboutData &KAboutData::setProgramIconName(const QString &iconName)
+{
+ d->programIconName = iconName;
+ return *this;
+}
+
+QVariant KAboutData::programLogo() const
+{
+ return d->programLogo;
+}
+
+KAboutData &KAboutData::setProgramLogo(const QVariant &image)
+{
+ d->programLogo = image;
+ return *this;
+}
+
+QString KAboutData::ocsProviderUrl() const
+{
+ return d->_ocsProviderUrl;
+}
+
+QString KAboutData::version() const
+{
+ return QString::fromUtf8(d->_version.data());
+}
+
+/// @internal
+/// Return the untranslated and uninterpreted (to UTF8) string
+/// for the version information. Used in particular for KCrash.
+const char *KAboutData::internalVersion() const
+{
+ return d->_version.constData();
+}
+
+QString KAboutData::shortDescription() const
+{
+ return d->_shortDescription;
+}
+
+QString KAboutData::homepage() const
+{
+ return d->_homepageAddress;
+}
+
+QString KAboutData::bugAddress() const
+{
+ return QString::fromUtf8(d->_bugAddress.constData());
+}
+
+QString KAboutData::organizationDomain() const
+{
+ return d->organizationDomain;
+}
+
+/// @internal
+/// Return the untranslated and uninterpreted (to UTF8) string
+/// for the bug mail address. Used in particular for KCrash.
+const char *KAboutData::internalBugAddress() const
+{
+ if (d->_bugAddress.isEmpty()) {
+ return nullptr;
+ }
+ return d->_bugAddress.constData();
+}
+
+QList<KAboutPerson> KAboutData::authors() const
+{
+ return d->_authorList;
+}
+
+QList<KAboutPerson> KAboutData::credits() const
+{
+ return d->_creditList;
+}
+
+QList<KAboutPerson> KAboutData::Private::parseTranslators(const QString &translatorName, const QString &translatorEmail)
+{
+ QList<KAboutPerson> personList;
+ if (translatorName.isEmpty() || translatorName == QStringLiteral("Your names")) {
+ return personList;
+ }
+
+ const QStringList nameList(translatorName.split(QLatin1Char(',')));
+
+ QStringList emailList;
+ if (!translatorEmail.isEmpty() && translatorEmail != QStringLiteral("Your emails")) {
+ emailList = translatorEmail.split(QLatin1Char(','), QString::KeepEmptyParts);
+ }
+
+ QStringList::const_iterator nit;
+ QStringList::const_iterator eit = emailList.constBegin();
+
+ for (nit = nameList.constBegin(); nit != nameList.constEnd(); ++nit) {
+ QString email;
+ if (eit != emailList.constEnd()) {
+ email = *eit;
+ ++eit;
+ }
+
+ personList.append(KAboutPerson((*nit).trimmed(), email.trimmed(), true));
+ }
+
+ return personList;
+}
+
+QList<KAboutPerson> KAboutData::translators() const
+{
+ return d->_translatorList;
+}
+
+
+QString KAboutData::aboutTranslationTeam()
+{
+ return QCoreApplication::translate(
+ "KAboutData",
+ "<p>KDE is translated into many languages thanks to the work "
+ "of the translation teams all over the world.</p>"
+ "<p>For more information on KDE internationalization "
+ "visit <a href=\"https://l10n.kde.org\">https://l10n.kde.org</a></p>",
+ "replace this with information about your translation team"
+ );
+}
+
+QString KAboutData::otherText() const
+{
+ return d->_otherText;
+}
+
+QList<KAboutLicense> KAboutData::licenses() const
+{
+ return d->_licenseList;
+}
+
+QString KAboutData::copyrightStatement() const
+{
+ return d->_copyrightStatement;
+}
+
+QString KAboutData::customAuthorPlainText() const
+{
+ return d->customAuthorPlainText;
+}
+
+QString KAboutData::customAuthorRichText() const
+{
+ return d->customAuthorRichText;
+}
+
+bool KAboutData::customAuthorTextEnabled() const
+{
+ return d->customAuthorTextEnabled;
+}
+
+KAboutData &KAboutData::setCustomAuthorText(const QString &plainText,
+ const QString &richText)
+{
+ d->customAuthorPlainText = plainText;
+ d->customAuthorRichText = richText;
+
+ d->customAuthorTextEnabled = true;
+
+ return *this;
+}
+
+KAboutData &KAboutData::unsetCustomAuthorText()
+{
+ d->customAuthorPlainText = QString();
+ d->customAuthorRichText = QString();
+
+ d->customAuthorTextEnabled = false;
+
+ return *this;
+}
+
+KAboutData &KAboutData::setDesktopFileName(const QString &desktopFileName)
+{
+ d->desktopFileName = desktopFileName;
+
+ return *this;
+}
+
+QString KAboutData::desktopFileName() const
+{
+ return d->desktopFileName;
+ // KF6: switch to this code and adapt API dox
+#if 0
+ // if desktopFileName has been explicitly set, use that value
+ if (!d->desktopFileName.isEmpty()) {
+ return d->desktopFileName;
+ }
+
+ // return a string calculated on-the-fly from the current org domain & component name
+ const QChar dotChar(QLatin1Char('.'));
+ QStringList hostComponents = d->organizationDomain.split(dotChar);
+
+ // desktop file name is reverse domain name
+ std::reverse(hostComponents.begin(), hostComponents.end());
+ hostComponents.append(componentName());
+
+ return hostComponents.join(dotChar);
+#endif
+}
+
+class KAboutDataRegistry
+{
+public:
+ KAboutDataRegistry() : m_appData(nullptr) {}
+ ~KAboutDataRegistry()
+ {
+ delete m_appData;
+ qDeleteAll(m_pluginData);
+ }
+ KAboutData *m_appData;
+ QHash<QString, KAboutData *> m_pluginData;
+};
+
+Q_GLOBAL_STATIC(KAboutDataRegistry, s_registry)
+
+namespace {
+
+void warnIfOutOfSync(const char *aboutDataString, const QString &aboutDataValue,
+ const char *appDataString, const QString &appDataValue)
+{
+ if (aboutDataValue != appDataValue) {
+ qCWarning(KABOUTDATA) << appDataString <<appDataValue << "is out-of-sync with" << aboutDataString << aboutDataValue;
+ }
+}
+
+}
+
+KAboutData KAboutData::applicationData()
+{
+ QCoreApplication *app = QCoreApplication::instance();
+
+ KAboutData *aboutData = s_registry->m_appData;
+
+ // not yet existing
+ if (!aboutData) {
+ // init from current Q*Application data
+ aboutData = new KAboutData(QCoreApplication::applicationName(),
+ QString(),
+ QString());
+ // For applicationDisplayName & desktopFileName, which are only properties of QGuiApplication,
+ // we have to try to get them via the property system, as the static getter methods are
+ // part of QtGui only. Disadvantage: requires an app instance.
+ // Either get all or none of the properties & warn about it
+ if (app) {
+ aboutData->setOrganizationDomain(QCoreApplication::organizationDomain().toUtf8());
+ aboutData->setVersion(QCoreApplication::applicationVersion().toUtf8());
+ aboutData->setDisplayName(app->property("applicationDisplayName").toString());
+ aboutData->setDesktopFileName(app->property("desktopFileName").toString());
+ } else {
+ qCWarning(KABOUTDATA) << "Could not initialize the properties of KAboutData::applicationData by the equivalent properties from Q*Application: no app instance (yet) existing.";
+ }
+
+ s_registry->m_appData = aboutData;
+ } else {
+ // check if in-sync with Q*Application metadata, as their setters could have been called
+ // after the last KAboutData::setApplicationData, with different values
+ warnIfOutOfSync("KAboutData::applicationData().componentName", aboutData->componentName(),
+ "QCoreApplication::applicationName", QCoreApplication::applicationName());
+ warnIfOutOfSync("KAboutData::applicationData().version", aboutData->version(),
+ "QCoreApplication::applicationVersion", QCoreApplication::applicationVersion());
+ warnIfOutOfSync("KAboutData::applicationData().organizationDomain", aboutData->organizationDomain(),
+ "QCoreApplication::organizationDomain", QCoreApplication::organizationDomain());
+ if (app) {
+ warnIfOutOfSync("KAboutData::applicationData().displayName", aboutData->displayName(),
+ "QGuiApplication::applicationDisplayName", app->property("applicationDisplayName").toString());
+ warnIfOutOfSync("KAboutData::applicationData().desktopFileName", aboutData->desktopFileName(),
+ "QGuiApplication::desktopFileName", app->property("desktopFileName").toString());
+ }
+ }
+
+ return *aboutData;
+}
+
+void KAboutData::setApplicationData(const KAboutData &aboutData)
+{
+ if (s_registry->m_appData) {
+ *s_registry->m_appData = aboutData;
+ } else {
+ s_registry->m_appData = new KAboutData(aboutData);
+ }
+
+ // For applicationDisplayName & desktopFileName, which are only properties of QGuiApplication,
+ // we have to try to set them via the property system, as the static getter methods are
+ // part of QtGui only. Disadvantage: requires an app instance.
+ // So set either all or none of the properties & warn about it
+ QCoreApplication *app = QCoreApplication::instance();
+ if (app) {
+ app->setApplicationVersion(aboutData.version());
+ app->setApplicationName(aboutData.componentName());
+ app->setOrganizationDomain(aboutData.organizationDomain());
+ app->setProperty("applicationDisplayName", aboutData.displayName());
+ app->setProperty("desktopFileName", aboutData.desktopFileName());
+ } else {
+ qCWarning(KABOUTDATA) << "Could not initialize the equivalent properties of Q*Application: no instance (yet) existing.";
+ }
+
+ // KF6: Rethink the current relation between KAboutData::applicationData and the Q*Application metadata
+ // Always overwriting the Q*Application metadata here, but not updating back the KAboutData
+ // in applicationData() is unbalanced and can result in out-of-sync data if the Q*Application
+ // setters have been called meanwhile
+ // Options are to remove the overlapping properties of KAboutData for cleancode, or making the
+ // overlapping properties official shadow properties of their Q*Application countparts, though
+ // that increases behavioural complexity a little.
+}
+
+void KAboutData::registerPluginData(const KAboutData &aboutData)
+{
+ s_registry->m_pluginData.insert(aboutData.componentName(), new KAboutData(aboutData));
+}
+
+KAboutData *KAboutData::pluginData(const QString &componentName)
+{
+ KAboutData *ad = s_registry->m_pluginData.value(componentName);
+ return ad;
+}
+
+// only for KCrash (no memory allocation allowed)
+const KAboutData *KAboutData::applicationDataPointer()
+{
+ if (s_registry.exists()) {
+ return s_registry->m_appData;
+ }
+ return nullptr;
+}
+
+bool KAboutData::setupCommandLine(QCommandLineParser *parser)
+{
+ if (!d->_shortDescription.isEmpty()) {
+ parser->setApplicationDescription(d->_shortDescription);
+ }
+
+ parser->addHelpOption();
+
+ QCoreApplication *app = QCoreApplication::instance();
+ if (app && !app->applicationVersion().isEmpty()) {
+ parser->addVersionOption();
+ }
+
+ return parser->addOption(QCommandLineOption(QStringLiteral("author"), QCoreApplication::translate("KAboutData CLI", "Show author information.")))
+ && parser->addOption(QCommandLineOption(QStringLiteral("license"), QCoreApplication::translate("KAboutData CLI", "Show license information.")))
+ && parser->addOption(QCommandLineOption(QStringLiteral("desktopfile"),
+ QCoreApplication::translate("KAboutData CLI", "The base file name of the desktop entry for this application."),
+ QCoreApplication::translate("KAboutData CLI", "file name")));
+}
+
+void KAboutData::processCommandLine(QCommandLineParser *parser)
+{
+ bool foundArgument = false;
+ if (parser->isSet(QStringLiteral("author"))) {
+ foundArgument = true;
+ if (d->_authorList.isEmpty()) {
+ printf("%s\n", qPrintable(QCoreApplication::translate("KAboutData CLI", "This application was written by somebody who wants to remain anonymous.")));
+ } else {
+ printf("%s\n", qPrintable(QCoreApplication::translate("KAboutData CLI", "%1 was written by:").arg(qAppName())));
+ Q_FOREACH (const KAboutPerson &person, d->_authorList) {
+ QString authorData = QStringLiteral(" ") + person.name();
+ if (!person.emailAddress().isEmpty()) {
+ authorData.append(QStringLiteral(" <") + person.emailAddress() + QStringLiteral(">"));
+ }
+ printf("%s\n", qPrintable(authorData));
+ }
+ }
+ if (!customAuthorTextEnabled()) {
+ if (bugAddress() == QLatin1String("submit@bugs.kde.org") ) {
+ printf("%s\n", qPrintable(QCoreApplication::translate("KAboutData CLI", "Please use https://bugs.kde.org to report bugs.")));
+ } else if (!bugAddress().isEmpty()) {
+ printf("%s\n", qPrintable(QCoreApplication::translate("KAboutData CLI", "Please report bugs to %1.").arg(bugAddress())));
+ }
+ } else {
+ printf("%s\n", qPrintable(customAuthorPlainText()));
+ }
+ } else if (parser->isSet(QStringLiteral("license"))) {
+ foundArgument = true;
+ Q_FOREACH (const KAboutLicense &license, d->_licenseList) {
+ printf("%s\n", qPrintable(license.text()));
+ }
+ }
+
+ const QString desktopFileName = parser->value(QStringLiteral("desktopfile"));
+ if (!desktopFileName.isEmpty()) {
+ d->desktopFileName = desktopFileName;
+ }
+
+ if (foundArgument) {
+ ::exit(EXIT_SUCCESS);
+ }
+}
+
+template <class T>
+QVariantList listToVariant(const QList<T>& values)
+{
+ QVariantList ret;
+ ret.reserve(values.count());
+ for(const auto &license: values) {
+ ret << QVariant::fromValue(license);
+ }
+ return ret;
+}
+
+QVariantList KAboutData::licensesVariant() const
+{
+ return listToVariant(d->_licenseList);
+}
+
+QVariantList KAboutData::authorsVariant() const
+{
+ return listToVariant(d->_authorList);
+}
+
+QVariantList KAboutData::creditsVariant() const
+{
+ return listToVariant(d->_creditList);
+}
+
+QVariantList KAboutData::translatorsVariant() const
+{
+ return listToVariant(d->_translatorList);
+}
--- /dev/null
+/*
+ * This file is part of the KDE Libraries
+ * Copyright (C) 2000 Espen Sand (espen@kde.org)
+ * Copyright (C) 2008 Friedrich W. H. Kossebau <kossebau@kde.org>
+ * Copyright (C) 2010 Teo Mrnjavac <teo@kde.org>
+ * Copyright (C) 2013 David Faure <faure+bluesystems@kde.org>
+ * Copyright (C) 2017 Harald Sitter <sitter@kde.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef KABOUTDATA_H
+#define KABOUTDATA_H
+
+#include <kcoreaddons_export.h>
+#include <QString>
+#include <QSharedDataPointer>
+#include <QObject>
+#include <QVariant>
+
+template <class T> class QList;
+class QCommandLineParser;
+class QJsonObject;
+class KAboutData;
+class KPluginMetaData;
+namespace KCrash
+{
+Q_DECL_IMPORT void defaultCrashHandler(int sig);
+}
+
+/**
+ * This class is used to store information about a person or developer.
+ * It can store the person's name, a task, an email address and a
+ * link to a home page. This class is intended for use in the
+ * KAboutData class, but it can be used elsewhere as well.
+ * Normally you should at least define the person's name.
+ * Creating a KAboutPerson object by yourself is relatively useless,
+ * but the KAboutData methods KAboutData::authors() and KAboutData::credits()
+ * return lists of KAboutPerson data objects which you can examine.
+ *
+ * Example usage within a main(), retrieving the list of people involved
+ * with a program and re-using data from one of them:
+ *
+ * @code
+ * KAboutData about("khello", i18n("KHello"), "0.1",
+ * i18n("A KDE version of Hello, world!"),
+ * KAboutLicense::LGPL,
+ * i18n("Copyright (C) 2014 Developer"));
+ *
+ * about.addAuthor(i18n("Joe Developer"), i18n("developer"), "joe@host.com", 0);
+ * QList<KAboutPerson> people = about.authors();
+ * about.addCredit(people[0].name(), people[0].task());
+ * @endcode
+ */
+class KCOREADDONS_EXPORT KAboutPerson
+{
+ Q_GADGET
+ Q_PROPERTY(QString name READ name CONSTANT)
+ Q_PROPERTY(QString task READ task CONSTANT)
+ Q_PROPERTY(QString emailAddress READ emailAddress CONSTANT)
+ Q_PROPERTY(QString webAddress READ webAddress CONSTANT)
+ Q_PROPERTY(QString ocsUsername READ ocsUsername CONSTANT)
+ friend class KAboutData;
+public:
+ /**
+ * Convenience constructor
+ *
+ * @param name The name of the person.
+ *
+ * @param task The task of this person.
+ *
+ * @param emailAddress The email address of the person.
+ *
+ * @param webAddress Home page of the person.
+ *
+ * @param ocsUsername Open Collaboration Services username of the person.
+ *
+ * @p name default argument @since 5.53
+ */
+ explicit KAboutPerson(const QString &name = QString(),
+ const QString &task = QString(),
+ const QString &emailAddress = QString(),
+ const QString &webAddress = QString(),
+ const QString &ocsUsername = QString());
+
+ /**
+ * Copy constructor. Performs a deep copy.
+ * @param other object to copy
+ */
+ KAboutPerson(const KAboutPerson &other);
+
+ ~KAboutPerson();
+
+ /**
+ * Assignment operator. Performs a deep copy.
+ * @param other object to copy
+ */
+ KAboutPerson &operator=(const KAboutPerson &other);
+
+ /**
+ * The person's name
+ * @return the person's name (can be QString(), if it has been
+ * constructed with an empty name)
+ */
+ QString name() const;
+
+ /**
+ * The person's task
+ * @return the person's task (can be QString(), if it has been
+ * constructed with an empty task)
+ */
+ QString task() const;
+
+ /**
+ * The person's email address
+ * @return the person's email address (can be QString(), if it has been
+ * constructed with an empty email)
+ */
+ QString emailAddress() const;
+
+ /**
+ * The home page or a relevant link
+ * @return the persons home page (can be QString(), if it has been
+ * constructed with an empty home page)
+ */
+ QString webAddress() const;
+
+ /**
+ * The person's Open Collaboration Services username
+ * @return the persons OCS username (can be QString(), if it has been
+ * constructed with an empty username)
+ */
+ QString ocsUsername() const;
+
+ /**
+ * Creates a @c KAboutPerson from a JSON object with the following structure:
+ *
+ * Key | Accessor
+ * -----------| ----------------------------
+ * Name | name()
+ * Email | emailAddress()
+ * Task | task()
+ * Website | webAddress()
+ * UserName | ocsUsername()
+ *
+ * The @c Name and @c Task key are translatable (by using e.g. a "Task[de_DE]" key)
+ *
+ * @since 5.18
+ */
+ static KAboutPerson fromJSON(const QJsonObject &obj);
+
+private:
+ /**
+ * @internal Used by KAboutData to construct translator data.
+ */
+ explicit KAboutPerson(const QString &name, const QString &email, bool disambiguation);
+
+ class Private;
+ Private *const d;
+};
+
+/**
+ * This class is used to store information about a license.
+ * The license can be one of some predefined, one given as text or one
+ * that can be loaded from a file. This class is used in the KAboutData class.
+ * Explicitly creating a KAboutLicense object is not possible.
+ * If the license is wanted for a KDE component having KAboutData object,
+ * use KAboutData::licenses() to get the licenses for that component.
+ * If the license is for a non-code resource and given by a keyword
+ * (e.g. in .desktop files), try using KAboutLicense::byKeyword().
+ */
+class KCOREADDONS_EXPORT KAboutLicense
+{
+ Q_GADGET
+ Q_PROPERTY(QString name READ name CONSTANT)
+ Q_PROPERTY(QString text READ text CONSTANT)
+ Q_PROPERTY(KAboutLicense::LicenseKey key READ key CONSTANT)
+ Q_PROPERTY(QString spdx READ spdx CONSTANT)
+ friend class KAboutData;
+public:
+
+ /**
+ * Describes the license of the software.
+ */
+ enum LicenseKey {
+ Custom = -2,
+ File = -1,
+ Unknown = 0,
+ GPL = 1,
+ GPL_V2 = 1,
+ LGPL = 2,
+ LGPL_V2 = 2,
+ BSDL = 3,
+ Artistic = 4,
+ QPL = 5,
+ QPL_V1_0 = 5,
+ GPL_V3 = 6,
+ LGPL_V3 = 7,
+ LGPL_V2_1 = 8 ///< @since 5.25
+ };
+ Q_ENUM(LicenseKey)
+
+ /**
+ * Format of the license name.
+ */
+ enum NameFormat {
+ ShortName,
+ FullName
+ };
+ Q_ENUM(NameFormat)
+
+ /**
+ * Whether later versions of the license are allowed.
+ */
+ enum VersionRestriction {
+ OnlyThisVersion,
+ OrLaterVersions
+ };
+ Q_ENUM(VersionRestriction)
+
+ /**
+ * @since 5.53
+ */
+ explicit KAboutLicense();
+
+ /**
+ * Copy constructor. Performs a deep copy.
+ * @param other object to copy
+ */
+ KAboutLicense(const KAboutLicense &other);
+
+ ~KAboutLicense();
+
+ /**
+ * Assignment operator. Performs a deep copy.
+ * @param other object to copy
+ */
+ KAboutLicense &operator=(const KAboutLicense &other);
+
+ /**
+ * Returns the full license text. If the licenseType argument of the
+ * constructor has been used, any text defined by setLicenseText is ignored,
+ * and the standard text for the chosen license will be returned.
+ *
+ * @return The license text.
+ */
+ QString text() const;
+
+ /**
+ * Returns the license name.
+ *
+ * Default argument @since 5.53
+ *
+ * @return The license name as a string.
+ */
+ QString name(KAboutLicense::NameFormat formatName = ShortName) const;
+
+ /**
+ * Returns the license key.
+ *
+ * @return The license key as element of KAboutLicense::LicenseKey enum.
+ */
+ KAboutLicense::LicenseKey key() const;
+
+ /**
+ * Returns the SPDX license expression of this license.
+ * If the underlying license cannot be expressed as a SPDX expression a null string is returned.
+ *
+ * @note SPDX expression are expansive constructs. If you parse the return value, do it in a
+ * SPDX specification compliant manner by splitting on whitespaces to discard unwanted
+ * information or by using a complete SPDX license expression parser.
+ * @note SPDX identifiers are case-insensitive. Do not use case-sensitive checks on the return
+ * value.
+ * @see https://spdx.org/licenses
+ * @return SPDX license expression or QString() if the license has no identifier. Compliant
+ * with SPDX 2.1.
+ *
+ * @since 5.37
+ */
+ QString spdx() const;
+
+ /**
+ * Fetch a known license by a keyword/spdx ID
+ *
+ * Frequently the license data is provided by a terse keyword-like string,
+ * e.g. by a field in a .desktop file. Using this method, an application
+ * can get hold of a proper KAboutLicense object, providing that the
+ * license is one of the several known to KDE, and use it to present
+ * more human-readable information to the user.
+ *
+ * Keywords are matched by stripping all whitespace and lowercasing.
+ * The known keywords correspond to the KAboutLicense::LicenseKey enumeration,
+ * e.g. any of "LGPLV3", "LGPLv3", "LGPL v3" would match KAboutLicense::LGPL_V3.
+ * If there is no match for the keyword, a valid license object is still
+ * returned, with its name and text informing about a custom license,
+ * and its key equal to KAboutLicense::Custom.
+ *
+ * @param keyword The license keyword.
+ * @return The license object.
+ *
+ * @see KAboutLicense::LicenseKey
+ */
+ static KAboutLicense byKeyword(const QString &keyword);
+
+private:
+ /**
+ * @internal Used by KAboutData to construct a predefined license.
+ */
+ explicit KAboutLicense(enum KAboutLicense::LicenseKey licenseType,
+ enum KAboutLicense::VersionRestriction versionRestriction,
+ const KAboutData *aboutData);
+ /**
+ * @internal Used by KAboutData to construct a predefined license.
+ */
+ explicit KAboutLicense(enum KAboutLicense::LicenseKey licenseType, const KAboutData *aboutData);
+ /**
+ * @internal Used by KAboutData to construct a KAboutLicense
+ */
+ explicit KAboutLicense(const KAboutData *aboutData);
+ /**
+ * @internal Used by KAboutData to construct license by given text
+ */
+ void setLicenseFromPath(const QString &pathToFile);
+ /**
+ * @internal Used by KAboutData to construct license by given text
+ */
+ void setLicenseFromText(const QString &licenseText);
+
+ class Private;
+ QSharedDataPointer<Private> d;
+};
+
+/**
+ * @class KAboutData kaboutdata.h KAboutData
+ *
+ * This class is used to store information about a program or plugin.
+ * It can store such values as version number, program name, home page, address
+ * for bug reporting, multiple authors and contributors
+ * (using KAboutPerson), license and copyright information.
+ *
+ * Currently, the values set here are shown by the "About" box
+ * (see KAboutDialog), used by the bug report dialog (see KBugReport),
+ * and by the help shown on command line (see KAboutData::setupCommandLine()).
+ *
+ * Porting Notes: Since KDE Frameworks 5.0, the translation catalog mechanism
+ * must provided by your translation framework to load the correct catalog
+ * instead (eg: KLocalizedString::setApplicationDomain() for KI18n, or
+ * QCoreApplication::installTranslator() for Qt's translation system). This
+ * applies to the old setCatalogName() and catalogName() members. But see also
+ * K4AboutData in kde4support as a compatibility class.
+ *
+ * Example:
+ * Setting the metadata of an application using KAboutData in code also relying
+ * on the KDE Framework modules KI18n and KDBusAddons:
+ * @code
+ * // create QApplication instance
+ * QApplication app(argc, argv);
+ * // setup translation string domain for the i18n calls
+ * KLocalizedString::setApplicationDomain("foo");
+ * // create a KAboutData object to use for setting the application metadata
+ * KAboutData aboutData("foo", i18n("Foo"), "0.1",
+ * i18n("To Foo or not To Foo"),
+ * KAboutLicense::LGPL,
+ * i18n("Copyright 2017 Bar Foundation"), QString(),
+ * "https://www.foo-the-app.net");
+ * // overwrite default-generated values of organizationDomain & desktopFileName
+ * aboutData.setOrganizationDomain("barfoundation.org");
+ * aboutData.setDesktopFileName("org.barfoundation.foo");
+ *
+ * // set the application metadata
+ * KAboutData::setApplicationData(aboutData);
+ * // in GUI apps set the window icon manually, not covered by KAboutData
+ * // needed for environments where the icon name is not extracted from
+ * // the information in the application's desktop file
+ * QApplication::setWindowIcon(QIcon::fromTheme(QStringLiteral("foo")));
+ *
+ * // integrate with commandline argument handling
+ * QCommandLineParser parser;
+ * aboutData.setupCommandLine(&parser);
+ * // setup of app specific commandline args
+ * [...]
+ * parser.process(app);
+ * aboutData.processCommandLine(&parser);
+ *
+ * // with the application metadata set, register to the D-Bus session
+ * KDBusService programDBusService(KDBusService::Multiple | KDBusService::NoExitOnFailure);
+ * @endcode
+ *
+ * @short Holds information needed by the "About" box and other
+ * classes.
+ * @author Espen Sand (espen@kde.org), David Faure (faure@kde.org)
+ *
+ */
+class KCOREADDONS_EXPORT KAboutData
+{
+ Q_GADGET
+ Q_PROPERTY(QString displayName READ displayName CONSTANT)
+ Q_PROPERTY(QString productName READ productName CONSTANT)
+ Q_PROPERTY(QString componentName READ componentName CONSTANT)
+ Q_PROPERTY(QVariant programLogo READ programLogo CONSTANT)
+ Q_PROPERTY(QString shortDescription READ shortDescription CONSTANT)
+ Q_PROPERTY(QString homepage READ homepage CONSTANT)
+ Q_PROPERTY(QString bugAddress READ bugAddress CONSTANT)
+ Q_PROPERTY(QString version READ version CONSTANT)
+ Q_PROPERTY(QString otherText READ otherText CONSTANT)
+ Q_PROPERTY(QVariantList authors READ authorsVariant CONSTANT) //constant in practice as addAuthor is not exposed to Q_GADGET
+ Q_PROPERTY(QVariantList credits READ creditsVariant CONSTANT)
+ Q_PROPERTY(QVariantList translators READ translatorsVariant CONSTANT)
+ Q_PROPERTY(QVariantList licenses READ licensesVariant CONSTANT)
+ Q_PROPERTY(QString copyrightStatement READ copyrightStatement CONSTANT)
+ Q_PROPERTY(QString desktopFileName READ desktopFileName CONSTANT)
+public:
+
+ /**
+ * Returns the KAboutData for the application.
+ *
+ * This contains information such as authors, license, etc.,
+ * provided that setApplicationData has been called before.
+ * If not called before, the returned KAboutData will be initialized from the
+ * equivalent properties of QCoreApplication (and its subclasses),
+ * if an instance of that already exists.
+ * For the list of such properties see setApplicationData
+ * (before 5.22: limited to QCoreApplication::applicationName).
+ * @see setApplicationData
+ */
+ static KAboutData applicationData();
+
+ /**
+ * Sets the application data for this application.
+ *
+ * In addition to changing the result of applicationData(), this initializes
+ * the equivalent properties of QCoreApplication (and its subclasses) with
+ * information from @p aboutData, if an instance of that already exists.
+ * Those properties are:
+ <ul>
+ <li>QCoreApplication::applicationName</li>
+ <li>QCoreApplication::applicationVersion</li>
+ <li>QCoreApplication::organizationDomain</li>
+ <li>QGuiApplication::applicationDisplayName</li>
+ <li>QGuiApplication::desktopFileName (since 5.16)</li>
+ </ul>
+ * @see applicationData
+ */
+ static void setApplicationData(const KAboutData &aboutData);
+
+ /**
+ * Register the KAboutData information for a plugin.
+ * Call this from the constructor of the plugin.
+ * This will register the plugin's @p aboutData under the component name
+ * that was set in @p aboutData.
+ */
+ static void registerPluginData(const KAboutData &aboutData);
+
+ /**
+ * Return the KAboutData for the given plugin identified by @p componentName.
+ */
+ static KAboutData *pluginData(const QString &componentName);
+
+ /**
+ * Creates a @c KAboutData from the given @p plugin metadata
+ *
+ * @since 5.18
+ */
+ static KAboutData fromPluginMetaData(const KPluginMetaData &plugin);
+
+public:
+ /**
+ * Constructor.
+ *
+ * Porting Note: The @p catalogName parameter present in KDE4 was
+ * deprecated and removed. See also K4AboutData
+ * in kde4support if this feature is needed for compatibility purposes, or
+ * consider using componentName() instead.
+ *
+ * @param componentName The program name or plugin name used internally.
+ * Example: QStringLiteral("kwrite"). This should never be translated.
+ *
+ * @param displayName A displayable name for the program or plugin. This string
+ * should be translated. Example: i18n("KWrite")
+ *
+ * @param version The component version string. Example: QStringLiteral("1.0").
+ *
+ * @param shortDescription A short description of what the component does.
+ * This string should be translated.
+ * Example: i18n("A simple text editor.")
+ *
+ * @param licenseType The license identifier. Use setLicenseText or
+ setLicenseTextFile if you use a license not predefined here.
+ *
+ * @param copyrightStatement A copyright statement, that can look like this:
+ * i18n("Copyright (C) 1999-2000 Name"). The string specified here is
+ * taken verbatim; the author information from addAuthor is not used.
+ *
+ * @param otherText Some free form text, that can contain any kind of
+ * information. The text can contain newlines. This string
+ * should be translated.
+ *
+ * @param homePageAddress The URL to the component's homepage, including
+ * URL scheme. "http://some.domain" is correct, "some.domain" is
+ * not. Since KDE Frameworks 5.17, https and other valid URL schemes
+ * are also valid. See also the note below.
+ *
+ * @param bugAddress The bug report address string, an email address or a URL.
+ * This defaults to the kde.org bug system.
+ *
+ * @note The @p homePageAddress argument is used to derive a default organization
+ * domain for the application (which is used to register on the session D-Bus,
+ * locate the appropriate desktop file, etc.), by taking the host name and dropping
+ * the first component, unless there are less than three (e.g. "www.kde.org" -> "kde.org").
+ * Use both setOrganizationDomain(const QByteArray&) and setDesktopFileName() if their default values
+ * do not have proper values.
+ *
+ * @see setOrganizationDomain(const QByteArray&), setDesktopFileName(const QString&)
+ */
+ // KF6: remove constructor that includes catalogName, and put default
+ // values back in for shortDescription and licenseType
+ KAboutData(const QString &componentName,
+ const QString &displayName,
+ const QString &version,
+ const QString &shortDescription,
+ enum KAboutLicense::LicenseKey licenseType,
+ const QString ©rightStatement = QString(),
+ const QString &otherText = QString(),
+ const QString &homePageAddress = QString(),
+ const QString &bugAddress = QStringLiteral("submit@bugs.kde.org")
+ );
+
+ /**
+ * Constructor.
+ *
+ * @param componentName The program name or plugin name used internally.
+ * Example: "kwrite".
+ *
+ * @param displayName A displayable name for the program or plugin. This string
+ * should be translated. Example: i18n("KWrite")
+ *
+ * @param version The component version string.
+ *
+ * Sets the property desktopFileName to "org.kde."+componentName and
+ * the property organizationDomain to "kde.org".
+ *
+ * Default arguments @since 5.53
+ *
+ * @see setOrganizationDomain(const QByteArray&), setDesktopFileName(const QString&)
+ */
+ explicit KAboutData(const QString &componentName = {},
+ const QString &displayName = {},
+ const QString &version = {}
+ );
+
+ /**
+ * Copy constructor. Performs a deep copy.
+ * @param other object to copy
+ */
+ KAboutData(const KAboutData &other);
+
+ /**
+ * Assignment operator. Performs a deep copy.
+ * @param other object to copy
+ */
+ KAboutData &operator=(const KAboutData &other);
+
+ ~KAboutData();
+
+ /**
+ * Defines an author.
+ *
+ * You can call this function as many times as you need. Each entry is
+ * appended to a list. The person in the first entry is assumed to be
+ * the leader of the project.
+ *
+ * @param name The developer's name. It should be translated.
+ *
+ * @param task What the person is responsible for. This text can contain
+ * newlines. It should be translated.
+ * Can be left empty.
+ *
+ * @param emailAddress An Email address where the person can be reached.
+ * Can be left empty.
+ *
+ * @param webAddress The person's homepage or a relevant link.
+ * Start the address with "http://". "http://some.domain" is
+ * correct, "some.domain" is not. Can be left empty.
+ *
+ * @param ocsUsername The person's Open Collaboration Services username.
+ * The provider can be optionally specified with @see setOcsProvider.
+ *
+ */
+ KAboutData &addAuthor(const QString &name,
+ const QString &task = QString(),
+ const QString &emailAddress = QString(),
+ const QString &webAddress = QString(),
+ const QString &ocsUsername = QString());
+
+ /**
+ * Defines a person that deserves credit.
+ *
+ * You can call this function as many times as you need. Each entry
+ * is appended to a list.
+ *
+ * @param name The person's name. It should be translated.
+ *
+ * @param task What the person has done to deserve the honor. The
+ * text can contain newlines. It should be translated.
+ * Can be left empty.
+ *
+ * @param emailAddress An email address when the person can be reached.
+ * Can be left empty.
+ *
+ * @param webAddress The person's homepage or a relevant link.
+ * Start the address with "http://". "http://some.domain" is
+ * is correct, "some.domain" is not. Can be left empty.
+ *
+ * @param ocsUsername The person's Open Collaboration Services username.
+ * The provider can be optionally specified with @see setOcsProvider.
+ *
+ */
+ KAboutData &addCredit(const QString &name,
+ const QString &task = QString(),
+ const QString &emailAddress = QString(),
+ const QString &webAddress = QString(),
+ const QString &ocsUsername = QString());
+
+ /**
+ * @brief Sets the name(s) of the translator(s) of the GUI.
+ *
+ * The canonical use with the ki18n framework is:
+ *
+ * \code
+ * setTranslator(i18nc("NAME OF TRANSLATORS", "Your names"),
+ * i18nc("EMAIL OF TRANSLATORS", "Your emails"));
+ * \endcode
+ *
+ * If you are using a KMainWindow this is done for you automatically.
+ *
+ * The name and emailAddress are treated as lists separated with ",".
+ *
+ * If the strings are empty or "Your names"/"Your emails"
+ * respectively they will be ignored.
+ *
+ * @param name the name(s) of the translator(s)
+ * @param emailAddress the email address(es) of the translator(s)
+ * @see KAboutTranslator
+ */
+ KAboutData &setTranslator(const QString &name,
+ const QString &emailAddress);
+
+ /**
+ * Defines a license text, which is translated.
+ *
+ * Example:
+ * \code
+ * setLicenseText( i18n("This is my license") );
+ * \endcode
+ *
+ * @param license The license text.
+ */
+ KAboutData &setLicenseText(const QString &license);
+
+ /**
+ * Adds a license text, which is translated.
+ *
+ * If there is only one unknown license set, e.g. by using the default
+ * parameter in the constructor, that one is replaced.
+ *
+ * Example:
+ * \code
+ * addLicenseText( i18n("This is my license") );
+ * \endcode
+ *
+ * @param license The license text.
+ * @see setLicenseText, addLicense, addLicenseTextFile
+ */
+ KAboutData &addLicenseText(const QString &license);
+
+ /**
+ * Defines a license text by pointing to a file where it resides.
+ * The file format has to be plain text in an encoding compatible to the locale.
+ *
+ * @param file Path to the file in the local filesystem containing the license text.
+ */
+ KAboutData &setLicenseTextFile(const QString &file);
+
+ /**
+ * Adds a license text by pointing to a file where it resides.
+ * The file format has to be plain text in an encoding compatible to the locale.
+ *
+ * If there is only one unknown license set, e.g. by using the default
+ * parameter in the constructor, that one is replaced.
+ *
+ * @param file Path to the file in the local filesystem containing the license text.
+ * @see addLicenseText, addLicense, setLicenseTextFile
+ */
+ KAboutData &addLicenseTextFile(const QString &file);
+
+ /**
+ * Defines the component name used internally.
+ *
+ * @param componentName The application or plugin name. Example: "kate".
+ */
+ KAboutData &setComponentName(const QString &componentName);
+
+ /**
+ * Defines the displayable component name string.
+ *
+ * @param displayName The display name. This string should be
+ * translated.
+ * Example: i18n("Advanced Text Editor").
+ */
+ KAboutData &setDisplayName(const QString &displayName);
+
+ /**
+ * Obsolete method
+ *
+ * This method used to set the icon name but this is no longer
+ * possible in KDE Frameworks 5 because KCoreAddons does not
+ * depend on QtGui.
+ *
+ * @param iconName name of the icon. Example: "accessories-text-editor"
+ * @see programIconName()
+ *
+ * @deprecated since 5.2, use QApplication::setWindowIcon(QIcon::fromTheme()) instead.
+ */
+ KCOREADDONS_DEPRECATED KAboutData &setProgramIconName(const QString &iconName); // KF6 remove this
+
+ /**
+ * Defines the program logo.
+ *
+ * Use this if you need to have an application logo
+ * in AboutData other than the application icon.
+ *
+ * Because KAboutData is a core class it cannot use QImage directly,
+ * so this is a QVariant that should contain a QImage.
+ *
+ * @param image logo image.
+ * @see programLogo()
+ */
+ KAboutData &setProgramLogo(const QVariant &image);
+
+ /**
+ * Specifies an Open Collaboration Services provider by URL.
+ * A provider file must be available for the chosen provider.
+ *
+ * Use this if you need to override the default provider.
+ *
+ * If this method is not used, all the KAboutPerson OCS usernames
+ * will be used with the openDesktop.org entry from the default
+ * provider file.
+ *
+ * @param providerUrl The provider URL as defined in the provider file.
+ */
+ KAboutData &setOcsProvider(const QString &providerUrl);
+
+ /**
+ * Defines the program version string.
+ *
+ * @param version The program version.
+ */
+ KAboutData &setVersion(const QByteArray &version);
+
+ /**
+ * Defines a short description of what the program does.
+ *
+ * @param shortDescription The program description. This string should
+ * be translated. Example: i18n("An advanced text
+ * editor with syntax highlighting support.").
+ */
+ KAboutData &setShortDescription(const QString &shortDescription);
+
+ /**
+ * Defines the license identifier.
+ *
+ * @param licenseKey The license identifier.
+ * @see addLicenseText, setLicenseText, setLicenseTextFile
+ */
+ KAboutData &setLicense(KAboutLicense::LicenseKey licenseKey);
+
+ /**
+ * Defines the license identifier.
+ *
+ * @param licenseKey The license identifier.
+ * @param versionRestriction Whether later versions of the license are also allowed.
+ * e.g. licensed under "GPL 2.0 or at your option later versions" would be OrLaterVersions.
+ * @see addLicenseText, setLicenseText, setLicenseTextFile
+ *
+ * @since 5.37
+ */
+ KAboutData &setLicense(KAboutLicense::LicenseKey licenseKey,
+ KAboutLicense::VersionRestriction versionRestriction);
+
+ /**
+ * Adds a license identifier.
+ *
+ * If there is only one unknown license set, e.g. by using the default
+ * parameter in the constructor, that one is replaced.
+ *
+ * @param licenseKey The license identifier.
+ * @see setLicenseText, addLicenseText, addLicenseTextFile
+ */
+ KAboutData &addLicense(KAboutLicense::LicenseKey licenseKey);
+
+ /**
+ * Adds a license identifier.
+ *
+ * If there is only one unknown license set, e.g. by using the default
+ * parameter in the constructor, that one is replaced.
+ *
+ * @param licenseKey The license identifier.
+ * @param versionRestriction Whether later versions of the license are also allowed.
+ * e.g. licensed under "GPL 2.0 or at your option later versions" would be OrLaterVersions.
+ * @see setLicenseText, addLicenseText, addLicenseTextFile
+ *
+ * @since 5.37
+ */
+ KAboutData &addLicense(KAboutLicense::LicenseKey licenseKey,
+ KAboutLicense::VersionRestriction versionRestriction);
+
+ /**
+ * Defines the copyright statement to show when displaying the license.
+ *
+ * @param copyrightStatement A copyright statement, that can look like
+ * this: i18n("Copyright (C) 1999-2000 Name"). The string specified here is
+ * taken verbatim; the author information from addAuthor is not used.
+ */
+ KAboutData &setCopyrightStatement(const QString ©rightStatement);
+
+ /**
+ * Defines the additional text to show in the about dialog.
+ *
+ * @param otherText Some free form text, that can contain any kind of
+ * information. The text can contain newlines. This string
+ * should be translated.
+ */
+ KAboutData &setOtherText(const QString &otherText);
+
+ /**
+ * Defines the program homepage.
+ *
+ * @param homepage The program homepage string.
+ * Start the address with "http://". "http://kate.kde.org"
+ * is correct but "kate.kde.org" is not.
+ */
+ KAboutData &setHomepage(const QString &homepage);
+
+ /**
+ * Defines the address where bug reports should be sent.
+ *
+ * @param bugAddress The bug report email address or URL.
+ * This defaults to the kde.org bug system.
+ */
+ KAboutData &setBugAddress(const QByteArray &bugAddress);
+
+ /**
+ * Defines the domain of the organization that wrote this application.
+ * The domain is set to kde.org by default, or the domain of the homePageAddress constructor argument,
+ * if set.
+ *
+ * Make sure to call setOrganizationDomain(const QByteArray&) if your product
+ * is not developed inside the KDE community.
+ *
+ * Used e.g. for the registration to D-Bus done by KDBusService
+ * from the KDE Frameworks KDBusAddons module.
+ *
+ * Calling this method has no effect on the value of the desktopFileName property.
+ *
+ * @note If your program should work as a D-Bus activatable service, the base name
+ * of the D-Bus service description file or of the desktop file you install must match
+ * the D-Bus "well-known name" for which the program will register.
+ * For example, KDBusService will use a name created from the reversed organization domain
+ * with the component name attached, so for an organization domain "bar.org" and a
+ * component name "foo" the name of an installed D-Bus service file needs to be
+ * "org.bar.foo.service" or the name of the installed desktop file "org.bar.foo.desktop"
+ * (and the desktopFileName property accordingly set to "org.bar.foo").
+ * For still supporting the deprecated start of services via KToolInvocation,
+ * the desktop file needs to have an entry with the key "X-DBUS-ServiceName"
+ * and a value which matches the used D-Bus "well-known name" as just described,
+ * so with the above used values it needs a line "X-DBUS-ServiceName=org.bar.foo"
+ *
+ * @param domain the domain name, for instance kde.org, koffice.org, etc.
+ *
+ * @see setDesktopFileName(const QString&)
+ */
+ KAboutData &setOrganizationDomain(const QByteArray &domain);
+
+ /**
+ * Defines the product name which will be used in the KBugReport dialog.
+ * By default it's the componentName, but you can overwrite it here to provide
+ * support for special components e.g. in the form 'product/component',
+ * such as 'kontact/summary'.
+ *
+ * @param name The name of product
+ */
+ KAboutData &setProductName(const QByteArray &name);
+
+ /**
+ * Returns the application's internal name.
+ * @return the internal program name.
+ */
+ QString componentName() const;
+
+ /**
+ * Returns the application's product name, which will be used in KBugReport
+ * dialog. By default it returns componentName(), otherwise the one which is set
+ * with setProductName()
+ *
+ * @return the product name.
+ */
+ QString productName() const;
+
+ /**
+ * Returns the translated program name.
+ * @return the program name (translated).
+ */
+ QString displayName() const;
+
+ /**
+ * Returns the domain name of the organization that wrote this application.
+ *
+ * @see setOrganizationDomain(const QByteArray&)
+ */
+ QString organizationDomain() const;
+
+ /**
+ * @internal
+ * Provided for use by KCrash
+ */
+ const char *internalProgramName() const;
+
+ /**
+ * Returns the program's icon name.
+ *
+ * The default value is componentName().
+ * @return the program's icon name.
+ *
+ * This is mostly for compatibility, given that setProgramIconName is deprecated.
+ */
+ QString programIconName() const;
+
+ /**
+ * Returns the program logo image.
+ *
+ * Because KAboutData is a core class it cannot use QImage directly,
+ * so this is a QVariant containing a QImage.
+ *
+ * @return the program logo data, or a null image if there is
+ * no custom application logo defined.
+ */
+ QVariant programLogo() const;
+
+ /**
+ * Returns the chosen Open Collaboration Services provider URL.
+ * @return the provider URL.
+ */
+ QString ocsProviderUrl() const;
+
+ /**
+ * Returns the program's version.
+ * @return the version string.
+ */
+ QString version() const;
+
+ /**
+ * @internal
+ * Provided for use by KCrash
+ */
+ const char *internalVersion() const;
+
+ /**
+ * Returns a short, translated description.
+ * @return the short description (translated). Can be
+ * QString() if not set.
+ */
+ QString shortDescription() const;
+
+ /**
+ * Returns the application homepage.
+ * @return the application homepage URL. Can be QString() if
+ * not set.
+ */
+ QString homepage() const;
+
+ /**
+ * Returns the email address or URL for bugs.
+ * @return the address where to report bugs.
+ */
+ QString bugAddress() const;
+
+ /**
+ * @internal
+ * Provided for use by KCrash
+ */
+ const char *internalBugAddress() const;
+
+ /**
+ * Returns a list of authors.
+ * @return author information (list of persons).
+ */
+ QList<KAboutPerson> authors() const;
+
+ /**
+ * Returns a list of persons who contributed.
+ * @return credit information (list of persons).
+ */
+ QList<KAboutPerson> credits() const;
+
+ /**
+ * Returns a list of translators.
+ * @return translators information (list of persons)
+ */
+ QList<KAboutPerson> translators() const;
+
+ /**
+ * Returns a message about the translation team.
+ * @return a message about the translation team
+ */
+ static QString aboutTranslationTeam();
+
+ /**
+ * Returns a translated, free form text.
+ * @return the free form text (translated). Can be QString() if not set.
+ */
+ QString otherText() const;
+
+ /**
+ * Returns a list of licenses.
+ *
+ * @return licenses information (list of licenses)
+ */
+ QList<KAboutLicense> licenses() const;
+
+ /**
+ * Returns the copyright statement.
+ * @return the copyright statement. Can be QString() if not set.
+ */
+ QString copyrightStatement() const;
+
+ /**
+ * Returns the plain text displayed around the list of authors instead
+ * of the default message telling users to send bug reports to bugAddress().
+ *
+ * @return the plain text displayed around the list of authors instead
+ * of the default message. Can be QString().
+ */
+ QString customAuthorPlainText() const;
+
+ /**
+ * Returns the rich text displayed around the list of authors instead
+ * of the default message telling users to send bug reports to bugAddress().
+ *
+ * @return the rich text displayed around the list of authors instead
+ * of the default message. Can be QString().
+ */
+ QString customAuthorRichText() const;
+
+ /**
+ * Returns whether custom text should be displayed around the list of
+ * authors.
+ *
+ * @return whether custom text should be displayed around the list of
+ * authors.
+ */
+ bool customAuthorTextEnabled() const;
+
+ /**
+ * Sets the custom text displayed around the list of authors instead
+ * of the default message telling users to send bug reports to bugAddress().
+ *
+ * @param plainText The plain text.
+ * @param richText The rich text.
+ *
+ * Setting both to parameters to QString() will cause no message to be
+ * displayed at all. Call unsetCustomAuthorText() to revert to the default
+ * message.
+ */
+ KAboutData &setCustomAuthorText(const QString &plainText,
+ const QString &richText);
+
+ /**
+ * Clears any custom text displayed around the list of authors and falls
+ * back to the default message telling users to send bug reports to
+ * bugAddress().
+ */
+ KAboutData &unsetCustomAuthorText();
+
+ /**
+ * Configures the @p parser command line parser to provide an authors entry with
+ * information about the developers of the application and an entry specifying the license.
+ *
+ * Additionally, it will set the description to the command line parser, will add the help
+ * option and if the QApplication has a version set (e.g. via KAboutData::setApplicationData)
+ * it will also add the version option.
+ *
+ * Since 5.16 it also adds an option to set the desktop file name.
+ *
+ * @returns true if adding the options was successful; otherwise returns false.
+ *
+ * @sa processCommandLine()
+ */
+ bool setupCommandLine(QCommandLineParser *parser);
+
+ /**
+ * Reads the processed @p parser and sees if any of the arguments are the ones set
+ * up from setupCommandLine().
+ *
+ * @sa setupCommandLine()
+ */
+ void processCommandLine(QCommandLineParser *parser);
+
+ /**
+ * Sets the base name of the desktop entry for this application.
+ *
+ * This is the file name, without the full path and without extension,
+ * of the desktop entry that represents this application according to
+ * the freedesktop desktop entry specification (e.g. "org.kde.foo").
+ *
+ * A default desktop file name is constructed when the KAboutData
+ * object is created, using the reverse domain name of the
+ * organizationDomain() and the componentName() as they are at the time
+ * of the KAboutData object creation.
+ * Call this method to override that default name. Typically this is
+ * done when also setOrganizationDomain(const QByteArray&) or setComponentName(const QString&)
+ * need to be called to override the initial values.
+ *
+ * The desktop file name can also be passed to the application at runtime through
+ * the @c desktopfile command line option which is added by setupCommandLine(QCommandLineParser*).
+ * This is useful if an application supports multiple desktop files with different runtime
+ * settings.
+ *
+ * @param desktopFileName The desktop file name of this application
+ *
+ * @sa desktopFileName()
+ * @sa organizationDomain()
+ * @sa componentName()
+ * @sa setupCommandLine(QCommandLineParser*)
+ * @since 5.16
+ **/
+ KAboutData &setDesktopFileName(const QString &desktopFileName);
+
+ /**
+ * @returns The desktop file name of this application (e.g. "org.kde.foo")
+ * @sa setDesktopFileName(const QString&)
+ * @since 5.16
+ **/
+ QString desktopFileName() const;
+
+private:
+ QVariantList licensesVariant() const;
+ QVariantList authorsVariant() const;
+ QVariantList creditsVariant() const;
+ QVariantList translatorsVariant() const;
+
+ friend void KCrash::defaultCrashHandler(int sig);
+ static const KAboutData *applicationDataPointer();
+
+ class Private;
+ Private *const d;
+};
+
+Q_DECLARE_METATYPE(KAboutData)
+Q_DECLARE_METATYPE(KAboutLicense)
+Q_DECLARE_METATYPE(KAboutPerson)
+
+#endif
+
--- /dev/null
+/*
+ * This file is part of the KDE Libraries
+ * Copyright (C) 2016 David Edmundson <davidedmundson@kde.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "kcoreaddons.h"
+
+#include <QString>
+
+#include "kcoreaddons_version.h"
+
+QString KCoreAddons::versionString()
+{
+ return QStringLiteral(KCOREADDONS_VERSION_STRING);
+}
+
+uint KCoreAddons::version()
+{
+ return KCOREADDONS_VERSION;
+}
--- /dev/null
+/*
+ * This file is part of the KDE Libraries
+ * Copyright (C) 2016 David Edmundson <davidedmundson@kde.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef KCOREADDONS_H
+#define KCOREADDONS_H
+
+#include <kcoreaddons_export.h>
+#include <QString>
+
+/**
+ * @namespace KCoreAddons
+ * Provides utility functions for metadata about the KCoreAddons library.
+ */
+namespace KCoreAddons
+{
+ /**
+ * Returns the version number of KCoreAddons at run-time as a string (for example, "5.19.0").
+ * This may be a different version than the version the application was compiled against.
+ * @since 5.20
+ */
+ KCOREADDONS_EXPORT QString versionString();
+
+ /**
+ * Returns a numerical version number of KCoreAddons at run-time in the form 0xMMNNPP
+ * (MM = major, NN = minor, PP = patch)
+ * This can be compared using the macro QT_VERSION_CHECK.
+ *
+ * For example:
+ * \code
+ * if (KCoreAddons::version() < QT_VERSION_CHECK(5,19,0))
+ * \endcode
+ *
+ * This may be a different version than the version the application was compiled against.
+ * @since 5.20
+ */
+ KCOREADDONS_EXPORT unsigned int version();
+}
+
+#endif
--- /dev/null
+The "Artistic License"
+
+ Preamble
+
+ The intent of this document is to state the conditions under which a
+ Package may be copied, such that the Copyright Holder maintains some
+ semblance of artistic control over the development of the package,
+ while giving the users of the package the right to use and distribute
+ the Package in a more-or-less customary fashion, plus the right to
+ make reasonable modifications.
+
+ Definitions
+
+ "Package" refers to the collection of files distributed by the
+ Copyright Holder, and derivatives of that collection of files
+ created through textual modification.
+
+ "Standard Version" refers to such a Package if it has not been
+ modified, or has been modified in accordance with the wishes of the
+ Copyright Holder as specified below.
+
+ "Copyright Holder" is whoever is named in the copyright or
+ copyrights for the package.
+
+ "You" is you, if you're thinking about copying or distributing this
+ Package.
+
+ "Reasonable copying fee" is whatever you can justify on the basis
+ of media cost, duplication charges, time of people involved, and so
+ on. (You will not be required to justify it to the Copyright
+ Holder, but only to the computing community at large as a market
+ that must bear the fee.)
+
+ "Freely Available" means that no fee is charged for the item
+ itself, though there may be fees involved in handling the item. It
+ also means that recipients of the item may redistribute it under
+ the same conditions they received it.
+
+ 1. You may make and give away verbatim copies of the source form of
+ the Standard Version of this Package without restriction, provided
+ that you duplicate all of the original copyright notices and
+ associated disclaimers.
+ 2. You may apply bug fixes, portability fixes and other modifications
+ derived from the Public Domain or from the Copyright Holder. A
+ Package modified in such a way shall still be considered the
+ Standard Version.
+ 3. You may otherwise modify your copy of this Package in any way,
+ provided that you insert a prominent notice in each changed file
+ stating how and when you changed that file, and provided that you
+ do at least ONE of the following:
+
+ a. place your modifications in the Public Domain or otherwise make
+ them Freely Available, such as by posting said modifications to
+ Usenet or an equivalent medium, or placing the modifications on a
+ major archive site such as uunet.uu.net, or by allowing the
+ Copyright Holder to include your modifications in the Standard
+ Version of the Package.
+ b. use the modified Package only within your corporation or
+ organization.
+ c. rename any non-standard executables so the names do not conflict
+ with standard executables, which must also be provided, and
+ provide a separate manual page for each non-standard executable
+ that clearly documents how it differs from the Standard Version.
+ d. make other distribution arrangements with the Copyright Holder.
+
+ You may distribute the programs of this Package in object code or
+ executable form, provided that you do at least ONE of the following:
+
+ a. distribute a Standard Version of the executables and library
+ files, together with instructions (in the manual page or
+ equivalent) on where to get the Standard Version.
+ b. accompany the distribution with the machine-readable source of the
+ Package with your modifications.
+ c. give non-standard executables non-standard names, and clearly
+ document the differences in manual pages (or equivalent), together
+ with instructions on where to get the Standard Version.
+ d. make other distribution arrangements with the Copyright Holder.
+
+ You may charge a reasonable copying fee for any distribution of this
+ Package. You may charge any fee you choose for support of this
+ Package. You may not charge a fee for this Package itself. However,
+ you may distribute this Package in aggregate with other (possibly
+ commercial) programs as part of a larger (possibly commercial)
+ software distribution provided that you do not advertise this Package
+ as a product of your own. You may embed this Package's interpreter
+ within an executable of yours (by linking); this shall be construed as
+ a mere form of aggregation, provided that the complete Standard
+ Version of the interpreter is so embedded.
+
+ The scripts and library files supplied as input to or produced as
+ output from the programs of this Package do not automatically fall
+ under the copyright of this Package, but belong to whomever generated
+ them, and may be sold commercially, and may be aggregated with this
+ Package. If such scripts or library files are aggregated with this
+ Package via the so-called "undump" or "unexec" methods of producing a
+ binary executable image, then distribution of such an image shall
+ neither be construed as a distribution of this Package nor shall it
+ fall under the restrictions of Paragraphs 3 and 4, provided that you
+ do not represent such an executable image as a Standard Version of
+ this Package.
+
+ C subroutines (or comparably compiled subroutines in other
+ languages) supplied by you and linked into this Package in order to
+ emulate subroutines and variables of the language defined by this
+ Package shall not be considered part of this Package, but are the
+ equivalent of input as in Paragraph 6, provided these subroutines do
+ not change the language in any way that would cause it to fail the
+ regression tests for the language.
+
+ Aggregation of this Package with a commercial distribution is always
+ permitted provided that the use of this Package is embedded; that is,
+ when no overt attempt is made to make this Package's interfaces
+ visible to the end user of the commercial distribution. Such use shall
+ not be construed as a distribution of this Package.
+
+ The name of the Copyright Holder may not be used to endorse or
+ promote products derived from this software without specific prior
+ written permission.
+
+ THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+ The End
--- /dev/null
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--- /dev/null
+# Install license files for use by KAboutLicense and KAboutData
+
+install(
+ FILES
+ BSD GPL_V2 GPL_V3 LGPL_V2 LGPL_V21 LGPL_V3 QPL_V1.0 ARTISTIC
+ DESTINATION
+ ${KDE_INSTALL_DATADIR}/kf5/licenses
+)
--- /dev/null
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
--- /dev/null
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
--- /dev/null
+ GNU LIBRARY GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1991 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the library GPL. It is
+ numbered 2 because it goes with version 2 of the ordinary GPL.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+ This license, the Library General Public License, applies to some
+specially designated Free Software Foundation software, and to any
+other libraries whose authors decide to use it. You can use it for
+your libraries, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if
+you distribute copies of the library, or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link a program with the library, you must provide
+complete object files to the recipients so that they can relink them
+with the library, after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ Our method of protecting your rights has two steps: (1) copyright
+the library, and (2) offer you this license which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ Also, for each distributor's protection, we want to make certain
+that everyone understands that there is no warranty for this free
+library. If the library is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original
+version, so that any problems introduced by others will not reflect on
+the original authors' reputations.
+\f
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that companies distributing free
+software will individually obtain patent licenses, thus in effect
+transforming the program into proprietary software. To prevent this,
+we have made it clear that any patent must be licensed for everyone's
+free use or not licensed at all.
+
+ Most GNU software, including some libraries, is covered by the ordinary
+GNU General Public License, which was designed for utility programs. This
+license, the GNU Library General Public License, applies to certain
+designated libraries. This license is quite different from the ordinary
+one; be sure to read it in full, and don't assume that anything in it is
+the same as in the ordinary license.
+
+ The reason we have a separate public license for some libraries is that
+they blur the distinction we usually make between modifying or adding to a
+program and simply using it. Linking a program with a library, without
+changing the library, is in some sense simply using the library, and is
+analogous to running a utility program or application program. However, in
+a textual and legal sense, the linked executable is a combined work, a
+derivative of the original library, and the ordinary General Public License
+treats it as such.
+
+ Because of this blurred distinction, using the ordinary General
+Public License for libraries did not effectively promote software
+sharing, because most developers did not use the libraries. We
+concluded that weaker conditions might promote sharing better.
+
+ However, unrestricted linking of non-free programs would deprive the
+users of those programs of all benefit from the free status of the
+libraries themselves. This Library General Public License is intended to
+permit developers of non-free programs to use free libraries, while
+preserving your freedom as a user of such programs to change the free
+libraries that are incorporated in them. (We have not seen how to achieve
+this as regards changes in header files, but we have achieved it as regards
+changes in the actual functions of the Library.) The hope is that this
+will lead to faster development of free libraries.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, while the latter only
+works together with the library.
+
+ Note that it is possible for a library to be covered by the ordinary
+General Public License rather than by this special one.
+\f
+ GNU LIBRARY GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library which
+contains a notice placed by the copyright holder or other authorized
+party saying it may be distributed under the terms of this Library
+General Public License (also called "this License"). Each licensee is
+addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+\f
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+\f
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+\f
+ 6. As an exception to the Sections above, you may also compile or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
+
+ c) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ d) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the source code distributed need not include anything that is normally
+distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+\f
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+\f
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded. In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Library General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+\f
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+\f
+ How to Apply These Terms to Your New Libraries
+
+ If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change. You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+ To apply these terms, attach the following notices to the library. It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the library's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+ <signature of Ty Coon>, 1 April 1990
+ Ty Coon, President of Vice
+
+That's all there is to it!
--- /dev/null
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL. It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+ This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it. You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+ When we speak of free software, we are referring to freedom of use,
+not price. Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+ To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights. These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ To protect each distributor, we want to make it very clear that
+there is no warranty for the free library. Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+\f
+ Finally, software patents pose a constant threat to the existence of
+any free program. We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder. Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+ Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License. This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License. We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+ When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library. The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom. The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+ We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License. It also provides other free software developers Less
+of an advantage over competing non-free programs. These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries. However, the Lesser license provides advantages in certain
+special circumstances.
+
+ For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard. To achieve this, non-free programs must be
+allowed to use the library. A more frequent case is that a free
+library does the same job as widely used non-free libraries. In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+ In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software. For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+ Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+\f
+ GNU LESSER GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+\f
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+\f
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+\f
+ 6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (1) uses at run time a
+ copy of the library already present on the user's computer system,
+ rather than copying library functions into the executable, and (2)
+ will operate properly with a modified version of the library, if
+ the user installs one, as long as the modified version is
+ interface-compatible with the version that the work was made with.
+
+ c) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
+
+ d) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ e) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+\f
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+\f
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded. In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+\f
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+\f
+ How to Apply These Terms to Your New Libraries
+
+ If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change. You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+ To apply these terms, attach the following notices to the library. It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the library's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+ <signature of Ty Coon>, 1 April 1990
+ Ty Coon, President of Vice
+
+That's all there is to it!
--- /dev/null
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+ This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+ 0. Additional Definitions.
+
+ As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+ "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+ An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+ A "Combined Work" is a work produced by combining or linking an
+Application with the Library. The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+ The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+ The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+ 1. Exception to Section 3 of the GNU GPL.
+
+ You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+ 2. Conveying Modified Versions.
+
+ If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+ a) under this License, provided that you make a good faith effort to
+ ensure that, in the event an Application does not supply the
+ function or data, the facility still operates, and performs
+ whatever part of its purpose remains meaningful, or
+
+ b) under the GNU GPL, with none of the additional permissions of
+ this License applicable to that copy.
+
+ 3. Object Code Incorporating Material from Library Header Files.
+
+ The object code form of an Application may incorporate material from
+a header file that is part of the Library. You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+ a) Give prominent notice with each copy of the object code that the
+ Library is used in it and that the Library and its use are
+ covered by this License.
+
+ b) Accompany the object code with a copy of the GNU GPL and this license
+ document.
+
+ 4. Combined Works.
+
+ You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+ a) Give prominent notice with each copy of the Combined Work that
+ the Library is used in it and that the Library and its use are
+ covered by this License.
+
+ b) Accompany the Combined Work with a copy of the GNU GPL and this license
+ document.
+
+ c) For a Combined Work that displays copyright notices during
+ execution, include the copyright notice for the Library among
+ these notices, as well as a reference directing the user to the
+ copies of the GNU GPL and this license document.
+
+ d) Do one of the following:
+
+ 0) Convey the Minimal Corresponding Source under the terms of this
+ License, and the Corresponding Application Code in a form
+ suitable for, and under terms that permit, the user to
+ recombine or relink the Application with a modified version of
+ the Linked Version to produce a modified Combined Work, in the
+ manner specified by section 6 of the GNU GPL for conveying
+ Corresponding Source.
+
+ 1) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (a) uses at run time
+ a copy of the Library already present on the user's computer
+ system, and (b) will operate properly with a modified version
+ of the Library that is interface-compatible with the Linked
+ Version.
+
+ e) Provide Installation Information, but only if you would otherwise
+ be required to provide such information under section 6 of the
+ GNU GPL, and only to the extent that such information is
+ necessary to install and execute a modified version of the
+ Combined Work produced by recombining or relinking the
+ Application with a modified version of the Linked Version. (If
+ you use option 4d0, the Installation Information must accompany
+ the Minimal Corresponding Source and Corresponding Application
+ Code. If you use option 4d1, you must provide the Installation
+ Information in the manner specified by section 6 of the GNU GPL
+ for conveying Corresponding Source.)
+
+ 5. Combined Libraries.
+
+ You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+ a) Accompany the combined library with a copy of the same work based
+ on the Library, uncombined with any other library facilities,
+ conveyed under the terms of this License.
+
+ b) Give prominent notice with the combined library that part of it
+ is a work based on the Library, and explaining where to find the
+ accompanying uncombined form of the same work.
+
+ 6. Revised Versions of the GNU Lesser General Public License.
+
+ The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+ If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
--- /dev/null
+ THE Q PUBLIC LICENSE
+ version 1.0
+
+ Copyright (C) 1999-2000 Troll Tech AS, Norway.
+ Everyone is permitted to copy and
+ distribute this license document.
+
+The intent of this license is to establish freedom to share and change the
+software regulated by this license under the open source model.
+
+This license applies to any software containing a notice placed by the
+copyright holder saying that it may be distributed under the terms of
+the Q Public License version 1.0. Such software is herein referred to as
+the Software. This license covers modification and distribution of the
+Software, use of third-party application programs based on the Software,
+and development of free software which uses the Software.
+
+ Granted Rights
+
+1. You are granted the non-exclusive rights set forth in this license
+ provided you agree to and comply with any and all conditions in this
+ license. Whole or partial distribution of the Software, or software
+ items that link with the Software, in any form signifies acceptance of
+ this license.
+
+2. You may copy and distribute the Software in unmodified form provided
+ that the entire package, including - but not restricted to - copyright,
+ trademark notices and disclaimers, as released by the initial developer
+ of the Software, is distributed.
+
+3. You may make modifications to the Software and distribute your
+ modifications, in a form that is separate from the Software, such as
+ patches. The following restrictions apply to modifications:
+
+ a. Modifications must not alter or remove any copyright notices in
+ the Software.
+
+ b. When modifications to the Software are released under this
+ license, a non-exclusive royalty-free right is granted to the
+ initial developer of the Software to distribute your modification
+ in future versions of the Software provided such versions remain
+ available under these terms in addition to any other license(s) of
+ the initial developer.
+
+4. You may distribute machine-executable forms of the Software or
+ machine-executable forms of modified versions of the Software, provided
+ that you meet these restrictions:
+
+ a. You must include this license document in the distribution.
+
+ b. You must ensure that all recipients of the machine-executable forms
+ are also able to receive the complete machine-readable source code
+ to the distributed Software, including all modifications, without
+ any charge beyond the costs of data transfer, and place prominent
+ notices in the distribution explaining this.
+
+ c. You must ensure that all modifications included in the
+ machine-executable forms are available under the terms of this
+ license.
+
+5. You may use the original or modified versions of the Software to
+ compile, link and run application programs legally developed by you
+ or by others.
+
+6. You may develop application programs, reusable components and other
+ software items that link with the original or modified versions of the
+ Software. These items, when distributed, are subject to the following
+ requirements:
+
+ a. You must ensure that all recipients of machine-executable forms of
+ these items are also able to receive and use the complete
+ machine-readable source code to the items without any charge
+ beyond the costs of data transfer.
+
+ b. You must explicitly license all recipients of your items to use
+ and re-distribute original and modified versions of the items in
+ both machine-executable and source code forms. The recipients must
+ be able to do so without any charges whatsoever, and they must be
+ able to re-distribute to anyone they choose.
+
+
+ c. If the items are not available to the general public, and the
+ initial developer of the Software requests a copy of the items,
+ then you must supply one.
+
+ Limitations of Liability
+
+In no event shall the initial developers or copyright holders be liable
+for any damages whatsoever, including - but not restricted to - lost
+revenue or profits or other direct, indirect, special, incidental or
+consequential damages, even if they have been advised of the possibility
+of such damages, except to the extent invariable law, if any, provides
+otherwise.
+
+ No Warranty
+
+The Software and this license document are provided AS IS with NO WARRANTY
+OF ANY KIND, INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS
+FOR A PARTICULAR PURPOSE.
+ Choice of Law
+
+This license is governed by the Laws of Norway. Disputes shall be settled
+by Oslo City Court.
--- /dev/null
+/******************************************************************************
+ * Copyright 2013-2014 Sebastian Kügler <sebas@kde.org> *
+ * Copyright 2014 Alex Richardson <arichardson.kde@gmail.com> *
+ * *
+ * This library is free software; you can redistribute it and/or *
+ * modify it under the terms of the GNU Lesser General Public *
+ * *
+ * License as published by the Free Software Foundation; either *
+ * version 2.1 of the License, or (at your option) version 3, or any *
+ * later version accepted by the membership of KDE e.V. (or its *
+ * successor approved by the membership of KDE e.V.), which shall *
+ * act as a proxy defined in Section 6 of version 3 of the license. *
+ * *
+ * This library is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
+ * Lesser General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Lesser General Public *
+ * License along with this library. If not, see *
+ * <http://www.gnu.org/licenses/>. *
+ * *
+ ******************************************************************************/
+
+
+#include "desktopfileparser_p.h"
+
+#include <QCache>
+#include <QDir>
+#include <QFile>
+#include <QJsonArray>
+#include <QJsonObject>
+#include <QMutex>
+#include <QStandardPaths>
+#include <QRegularExpression>
+#include <QRegularExpressionMatch>
+
+// in the desktoptojson binary enable debug messages by default, in the library only warning messages
+#ifdef BUILDING_DESKTOPTOJSON_TOOL
+Q_LOGGING_CATEGORY(DESKTOPPARSER, "kf5.kcoreaddons.desktopparser", QtDebugMsg)
+#else
+Q_LOGGING_CATEGORY(DESKTOPPARSER, "kf5.kcoreaddons.desktopparser", QtWarningMsg)
+#endif
+
+
+#ifdef BUILDING_DESKTOPTOJSON_TOOL
+// use if not else to prevent wrong scoping
+#define DESKTOPTOJSON_VERBOSE_DEBUG if (!DesktopFileParser::s_verbose) {} else qCDebug(DESKTOPPARSER)
+#define DESKTOPTOJSON_VERBOSE_WARNING if (!DesktopFileParser::s_verbose) {} else qCWarning(DESKTOPPARSER)
+#else
+#define DESKTOPTOJSON_VERBOSE_DEBUG QT_NO_QDEBUG_MACRO()
+#define DESKTOPTOJSON_VERBOSE_WARNING QT_NO_QDEBUG_MACRO()
+#endif
+
+
+using namespace DesktopFileParser;
+
+// This code was taken from KConfigGroupPrivate::deserializeList
+QStringList DesktopFileParser::deserializeList(const QString &data, char separator)
+{
+ if (data.isEmpty()) {
+ return QStringList();
+ }
+ if (data == QLatin1String("\\0")) {
+ return QStringList(QString());
+ }
+ QStringList value;
+ QString val;
+ val.reserve(data.size());
+ bool quoted = false;
+ for (int p = 0; p < data.length(); p++) {
+ if (quoted) {
+ val += data[p];
+ quoted = false;
+ } else if (data[p].unicode() == '\\') {
+ quoted = true;
+ } else if (data[p].unicode() == separator) {
+ value.append(val);
+ if (p == data.length() - 1) {
+ // don't add an empty entry to the end if the last character is a separator
+ return value;
+ }
+ val.clear();
+ val.reserve(data.size() - p);
+ } else {
+ val += data[p];
+ }
+ }
+ value.append(val);
+ return value;
+}
+
+QByteArray DesktopFileParser::escapeValue(const QByteArray &input)
+{
+ const int start = input.indexOf('\\');
+ if (start < 0) {
+ return input;
+ }
+
+ // we could do this in place, but this code is simpler
+ // this tool is probably only transitional, so no need to optimize
+ QByteArray result;
+ result.reserve(input.size());
+ result.append(input.data(), start);
+ for (int i = start; i < input.length(); ++i) {
+ if (input[i] != '\\') {
+ result.append(input[i]);
+ } else {
+ if (i + 1 >= input.length()) {
+ // just append the backslash if we are at end of line
+ result.append(input[i]);
+ break;
+ }
+ i++; // consume next character
+ char nextChar = input[i];
+ switch (nextChar) {
+ case 's':
+ result.append(' ');
+ break;
+ case 'n':
+ result.append('\n');
+ break;
+ case 't':
+ result.append('\t');
+ break;
+ case 'r':
+ result.append('\r');
+ break;
+ case '\\':
+ result.append('\\');
+ break;
+ default:
+ result.append('\\');
+ result.append(nextChar); // just ignore the escape sequence
+ }
+ }
+ }
+ return result;
+}
+
+struct CustomPropertyDefinition {
+ // default ctor needed for QVector
+ CustomPropertyDefinition() : type(QVariant::String) {}
+ CustomPropertyDefinition(const QByteArray &key, QVariant::Type type)
+ : key(key) , type(type) {}
+ QJsonValue fromString(const QString &str) const
+ {
+ switch (type) {
+ case QVariant::String:
+ return str;
+ case QVariant::StringList:
+ return QJsonArray::fromStringList(deserializeList(str));
+ case QVariant::Int: {
+ bool ok = false;
+ int result = str.toInt(&ok);
+ if (!ok) {
+ qCWarning(DESKTOPPARSER) << "Invalid integer value for key" << key << "-" << str;
+ return QJsonValue();
+ }
+ return QJsonValue(result);
+ }
+ case QVariant::Double: {
+ bool ok = false;
+ double result = str.toDouble(&ok);
+ if (!ok) {
+ qCWarning(DESKTOPPARSER) << "Invalid double value for key" << key << "-" << str;
+ return QJsonValue();
+ }
+ return QJsonValue(result);
+ }
+ case QVariant::Bool: {
+ bool result = str.compare(QLatin1String("true"), Qt::CaseInsensitive) == 0;
+ if (!result && str.compare(QLatin1String("false"), Qt::CaseInsensitive) != 0) {
+ qCWarning(DESKTOPPARSER) << "Invalid boolean value for key" << key << "-" << str;
+ return QJsonValue();
+ }
+ return QJsonValue(result);
+ }
+ default:
+ // This was checked when parsing the file, no other QVariant::Type values are possible
+ Q_UNREACHABLE();
+ }
+ }
+ QByteArray key;
+ QVariant::Type type;
+};
+
+namespace {
+
+bool readUntilDesktopEntryGroup(QFile &file, const QString &path, int &lineNr)
+{
+ if (!file.open(QFile::ReadOnly)) {
+ qCWarning(DESKTOPPARSER) << "Error: Failed to open " << path;
+ return false;
+ }
+ // we only convert data inside the [Desktop Entry] group
+ while (!file.atEnd()) {
+ const QByteArray line = file.readLine().trimmed();
+ lineNr++;
+ if (line == "[Desktop Entry]") {
+ return true;
+ }
+ }
+ qCWarning(DESKTOPPARSER) << "Error: Could not find [Desktop Entry] group in " << path;
+ return false;
+}
+
+
+QByteArray readTypeEntryForCurrentGroup(QFile &df, QByteArray *nextGroup)
+{
+ QByteArray group = *nextGroup;
+ QByteArray type;
+ if (group.isEmpty()) {
+ qCWarning(DESKTOPPARSER, "Read empty .desktop file group name! Invalid file?");
+ }
+ while (!df.atEnd()) {
+ QByteArray line = df.readLine().trimmed();
+ // skip empty lines and comments
+ if (line.isEmpty() || line.startsWith('#')) {
+ continue;
+ }
+ if (line.startsWith('[')) {
+ if (!line.endsWith(']')) {
+ qCWarning(DESKTOPPARSER) << "Illegal .desktop group definition (does not end with ']'):" << line;
+ }
+ QByteArray name = line.mid(1, line.lastIndexOf(']') - 1).trimmed();
+ // we have reached the next group -> return current group and Type= value
+ *nextGroup = name;
+ break;
+ }
+
+ const static QRegularExpression typeEntryRegex(
+ QStringLiteral("^Type\\s*=\\s*(.*)$"));
+ const auto match = typeEntryRegex.match(QString::fromUtf8(line));
+ if (match.hasMatch()) {
+ type = match.captured(1).toUtf8();
+ }
+ }
+ return type;
+}
+
+bool tokenizeKeyValue(QFile &df, const QString &src, QByteArray &key, QString &value, int &lineNr)
+{
+ const QByteArray line = df.readLine().trimmed();
+ lineNr++;
+ if (line.isEmpty()) {
+ DESKTOPTOJSON_VERBOSE_DEBUG << "Line " << lineNr << ": empty";
+ return true;
+ }
+ if (line.startsWith('#')) {
+ DESKTOPTOJSON_VERBOSE_DEBUG << "Line " << lineNr << ": comment";
+ return true; // skip comments
+ }
+ if (line.startsWith('[')) {
+ // start of new group -> doesn't interest us anymore
+ DESKTOPTOJSON_VERBOSE_DEBUG << "Line " << lineNr << ": start of new group " << line;
+ return false;
+ }
+ // must have form key=value now
+ const int equalsIndex = line.indexOf('=');
+ if (equalsIndex == -1) {
+ qCWarning(DESKTOPPARSER).nospace() << qPrintable(src) << ':' << lineNr << ": Line is neither comment nor group "
+ "and doesn't contain an '=' character: \"" << line.constData() << '\"';
+ return true;
+ }
+ // trim key and value to remove spaces around the '=' char
+ key = line.mid(0, equalsIndex).trimmed();
+ if (key.isEmpty()) {
+ qCWarning(DESKTOPPARSER).nospace() << qPrintable(src) << ':' << lineNr << ": Key name is missing: \"" << line.constData() << '\"';
+ return true;
+ }
+
+ const QByteArray valueRaw = line.mid(equalsIndex + 1).trimmed();
+ const QByteArray valueEscaped = escapeValue(valueRaw);
+ value = QString::fromUtf8(valueEscaped);
+
+#ifdef BUILDING_DESKTOPTOJSON_TOOL
+ DESKTOPTOJSON_VERBOSE_DEBUG.nospace() << "Line " << lineNr << ": key=" << key << ", value=" << value;
+ if (valueEscaped != valueRaw) {
+ DESKTOPTOJSON_VERBOSE_DEBUG << "Line " << lineNr << " contained escape sequences";
+ }
+#endif
+
+ return true;
+}
+
+static QString locateRelativeServiceType(const QString &relPath)
+{
+ return QStandardPaths::locate(QStandardPaths::GenericDataLocation,
+ QStringLiteral("kservicetypes5/") + relPath);
+}
+
+static QVector<CustomPropertyDefinition>* parseServiceTypesFile(const QString &inputPath)
+{
+ int lineNr = 0;
+ QString path = inputPath;
+ if (QDir::isRelativePath(path)) {
+ path = locateRelativeServiceType(path);
+ QString rcPath;
+ if (path.isEmpty()) {
+ rcPath = QStringLiteral(":/kservicetypes5/") + inputPath;
+ if (QFileInfo::exists(rcPath)) {
+ path = rcPath;
+ }
+ }
+ if (path.isEmpty()) {
+ qCWarning(DESKTOPPARSER).nospace() << "Could not locate service type file kservicetypes5/" << qPrintable(inputPath) << ", tried " << QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation) << " and " << rcPath;
+ return nullptr;
+ }
+ }
+ QFile df(path);
+ if (!df.exists()) {
+ qCCritical(DESKTOPPARSER) << "Service type file" << path << "does not exist";
+ return nullptr;
+ }
+ if (!readUntilDesktopEntryGroup(df, path, lineNr)) {
+ return nullptr;
+ }
+ QVector<CustomPropertyDefinition> result;
+ // TODO: passing nextGroup by pointer is inefficient as it will make deep copies every time
+ // Not exactly performance critical code though so low priority
+ QByteArray nextGroup = "Desktop Entry";
+ // Type must be ServiceType now
+ QByteArray typeStr = readTypeEntryForCurrentGroup(df, &nextGroup);
+ if (typeStr != QByteArrayLiteral("ServiceType")) {
+ qCWarning(DESKTOPPARSER) << path << "is not a valid service type: Type entry should be 'ServiceType', got"
+ << typeStr << "instead.";
+ return nullptr;
+ }
+ while (!df.atEnd()) {
+ QByteArray currentGroup = nextGroup;
+ typeStr = readTypeEntryForCurrentGroup(df, &nextGroup);
+ if (!currentGroup.startsWith(QByteArrayLiteral("PropertyDef::"))) {
+ qCWarning(DESKTOPPARSER) << "Skipping invalid group" << currentGroup << "in service type" << path;
+ continue;
+ }
+ if (typeStr.isEmpty()) {
+ qCWarning(DESKTOPPARSER) << "Could not find Type= key in group" << currentGroup;
+ continue;
+ }
+ QByteArray propertyName = currentGroup.mid(qstrlen("PropertyDef::"));
+ QVariant::Type type = QVariant::nameToType(typeStr.constData());
+ switch (type) {
+ case QVariant::String:
+ case QVariant::StringList:
+ case QVariant::Int:
+ case QVariant::Double:
+ case QVariant::Bool:
+ qCDebug(DESKTOPPARSER) << "Found property definition" << propertyName << "with type" << typeStr;
+ result.push_back(CustomPropertyDefinition(propertyName, type));
+ break;
+ case QVariant::Invalid:
+ qCWarning(DESKTOPPARSER) << "Property type" << typeStr << "is not a known QVariant type."
+ " Found while parsing property definition for" << propertyName << "in" << path;
+ break;
+ default:
+ qCWarning(DESKTOPPARSER) << "Unsupported property type" << typeStr << "for property" << propertyName
+ << "found in" << path << "\nOnly QString, QStringList, int, double and bool are supported.";
+ }
+ }
+ return new QVector<CustomPropertyDefinition>(result);
+}
+
+// a lazy map of service type definitions
+typedef QCache<QString, QVector<CustomPropertyDefinition>> ServiceTypesHash;
+Q_GLOBAL_STATIC(ServiceTypesHash, s_serviceTypes)
+// access must be guarded by serviceTypesMutex as this code could be executed by multiple threads
+QBasicMutex s_serviceTypesMutex;
+} // end of anonymous namespace
+
+
+ServiceTypeDefinition::ServiceTypeDefinition()
+{
+}
+
+ServiceTypeDefinition ServiceTypeDefinition::fromFiles(const QStringList &paths)
+{
+ ServiceTypeDefinition ret;
+ ret.m_definitions.reserve(paths.size());
+ // as we might modify the cache we need to acquire a mutex here
+ foreach (const QString &serviceTypePath, paths) {
+ bool added = ret.addFile(serviceTypePath);
+ if (!added) {
+#ifdef BUILDING_DESKTOPTOJSON_TOOL
+ exit(1); // this is a fatal error when using kcoreaddons_desktop_to_json()
+#endif
+ }
+ }
+ return ret;
+}
+
+bool ServiceTypeDefinition::addFile(const QString& path)
+{
+ QMutexLocker lock(&s_serviceTypesMutex);
+ QVector<CustomPropertyDefinition>* def = s_serviceTypes->object(path);
+
+ if (def) {
+ // in cache but we still must make our own copy
+ m_definitions << *def;
+ }
+ else {
+ // not found in cache -> we need to parse the file
+ qCDebug(DESKTOPPARSER) << "About to parse service type file" << path;
+ def = parseServiceTypesFile(path);
+ if (!def) {
+ return false;
+ }
+
+ m_definitions << *def; // This must *precede* insert call, insert might delete
+ s_serviceTypes->insert(path, def);
+ }
+ return true;
+}
+
+QJsonValue ServiceTypeDefinition::parseValue(const QByteArray &key, const QString &value) const
+{
+ // check whether the key has a special type associated with it
+ foreach (const CustomPropertyDefinition &propertyDef, m_definitions) {
+ if (propertyDef.key == key) {
+ return propertyDef.fromString(value);
+ }
+ }
+ qCDebug(DESKTOPPARSER) << "Unknown property type for key" << key << "-> falling back to string";
+ return QJsonValue(value);
+}
+
+void DesktopFileParser::convertToJson(const QByteArray &key, ServiceTypeDefinition &serviceTypes, const QString &value,
+ QJsonObject &json, QJsonObject &kplugin, int lineNr)
+{
+ /* The following keys are recognized (and added to a "KPlugin" object):
+
+ Icon=mypluginicon
+ Type=Service
+ ServiceTypes=KPluginInfo
+ MimeType=text/plain;image/png
+
+ Name=User Visible Name (translatable)
+ Comment=Description of what the plugin does (translatable)
+
+ X-KDE-PluginInfo-Author=Author's Name
+ X-KDE-PluginInfo-Email=author@foo.bar
+ X-KDE-PluginInfo-Name=internalname
+ X-KDE-PluginInfo-Version=1.1
+ X-KDE-PluginInfo-Website=http://www.plugin.org/
+ X-KDE-PluginInfo-Category=playlist
+ X-KDE-PluginInfo-Depends=plugin1,plugin3
+ X-KDE-PluginInfo-License=GPL
+ X-KDE-PluginInfo-EnabledByDefault=true
+ X-KDE-FormFactors=desktop
+ */
+ if (key == QByteArrayLiteral("Icon")) {
+ kplugin[QStringLiteral("Icon")] = value;
+ } else if (key == QByteArrayLiteral("X-KDE-PluginInfo-Name")) {
+ kplugin[QStringLiteral("Id")] = value;
+ } else if (key == QByteArrayLiteral("X-KDE-PluginInfo-Category")) {
+ kplugin[QStringLiteral("Category")] = value;
+ } else if (key == QByteArrayLiteral("X-KDE-PluginInfo-License")) {
+ kplugin[QStringLiteral("License")] = value;
+ } else if (key == QByteArrayLiteral("X-KDE-PluginInfo-Version")) {
+ kplugin[QStringLiteral("Version")] = value;
+ } else if (key == QByteArrayLiteral("X-KDE-PluginInfo-Website")) {
+ kplugin[QStringLiteral("Website")] = value;
+ } else if (key == QByteArrayLiteral("X-KDE-PluginInfo-Depends")) {
+ kplugin[QStringLiteral("Dependencies")] = QJsonArray::fromStringList(deserializeList(value));
+ } else if (key == QByteArrayLiteral("X-KDE-ServiceTypes") || key == QByteArrayLiteral("ServiceTypes")) {
+ //NOTE: "X-KDE-ServiceTypes" and "ServiceTypes" were already managed in the first parse step, so this second one is almost a noop
+ const auto services = deserializeList(value);
+ kplugin[QStringLiteral("ServiceTypes")] = QJsonArray::fromStringList(services);
+ } else if (key == QByteArrayLiteral("MimeType")) {
+ // MimeType is a XDG string list and not a KConfig list so we need to use ';' as the separator
+ kplugin[QStringLiteral("MimeTypes")] = QJsonArray::fromStringList(deserializeList(value, ';'));
+ // make sure that applications using kcoreaddons_desktop_to_json() that depend on reading
+ // the MimeType property still work (see https://git.reviewboard.kde.org/r/125527/)
+ json[QStringLiteral("MimeType")] = value; // TODO KF6 remove this compatibility code
+ } else if (key == QByteArrayLiteral("X-KDE-FormFactors")) {
+ kplugin[QStringLiteral("FormFactors")] = QJsonArray::fromStringList(deserializeList(value));
+ } else if (key == QByteArrayLiteral("X-KDE-PluginInfo-EnabledByDefault")) {
+ bool boolValue = false;
+ // should only be lower case, but be tolerant here
+ if (value.toLower() == QLatin1String("true")) {
+ boolValue = true;
+ } else {
+ if (value.toLower() != QLatin1String("false")) {
+ qCWarning(DESKTOPPARSER).nospace() << "Expected boolean value for key \"" << key
+ << "\" at line " << lineNr << "but got \"" << value << "\" instead.";
+ }
+ }
+ kplugin[QStringLiteral("EnabledByDefault")] = boolValue;
+ } else if (key == QByteArrayLiteral("X-KDE-PluginInfo-Author")) {
+ QJsonObject authorsObject = kplugin.value(QStringLiteral("Authors")).toArray().at(0).toObject();
+ // if the authors object doesn't exist yet this will create it
+ authorsObject[QStringLiteral("Name")] = value;
+ QJsonArray array;
+ array.append(authorsObject);
+ kplugin[QStringLiteral("Authors")] = array;
+ } else if (key == QByteArrayLiteral("X-KDE-PluginInfo-Email")) {
+ QJsonObject authorsObject = kplugin.value(QStringLiteral("Authors")).toArray().at(0).toObject();
+ // if the authors object doesn't exist yet this will create it
+ authorsObject[QStringLiteral("Email")] = value;
+ QJsonArray array;
+ array.append(authorsObject);
+ kplugin[QStringLiteral("Authors")] = array;
+ } else if (key == QByteArrayLiteral("Name") || key.startsWith(QByteArrayLiteral("Name["))) {
+ // TODO: also handle GenericName? does that make any sense, or is X-KDE-PluginInfo-Category enough?
+ kplugin[QString::fromUtf8(key)] = value;
+ } else if (key == QByteArrayLiteral("Comment")) {
+ kplugin[QStringLiteral("Description")] = value;
+ } else if (key.startsWith(QByteArrayLiteral("Comment["))) {
+ kplugin[QStringLiteral("Description") + QString::fromUtf8(key.mid(qstrlen("Comment")))] = value;
+ } else if (key == QByteArrayLiteral("Hidden")) {
+ DESKTOPTOJSON_VERBOSE_WARNING << "Hidden= key found in desktop file, this makes no sense"
+ " with metadata inside the plugin.";
+ kplugin[QString::fromUtf8(key)] = (value.toLower() == QLatin1String("true"));
+ } else if (key == QByteArrayLiteral("Exec") || key == QByteArrayLiteral("Type")
+ || key == QByteArrayLiteral("X-KDE-Library") || key == QByteArrayLiteral("Encoding")) {
+ // Exec= doesn't make sense here, however some .desktop files (like e.g. in kdevelop) have a dummy value here
+ // also the Type=Service entry is no longer needed
+ // X-KDE-Library is also not needed since we already have the library to read this metadata
+ // Encoding= is also not converted as we always use utf-8 for reading
+ DESKTOPTOJSON_VERBOSE_DEBUG << "Not converting key " << key << "=" << value;
+ } else {
+ // check service type definitions or fall back to QString
+ json[QString::fromUtf8(key)] = serviceTypes.parseValue(key, value);
+ }
+}
+
+bool DesktopFileParser::convert(const QString &src, const QStringList &serviceTypes, QJsonObject &json, QString *libraryPath)
+{
+ QFile df(src);
+ int lineNr = 0;
+ ServiceTypeDefinition serviceTypeDef = ServiceTypeDefinition::fromFiles(serviceTypes);
+ readUntilDesktopEntryGroup(df, src, lineNr);
+ DESKTOPTOJSON_VERBOSE_DEBUG << "Found [Desktop Entry] group in line" << lineNr;
+ auto startPos = df.pos();
+
+ //parse it a first time to know servicetype
+ while (!df.atEnd()) {
+ QByteArray key;
+ QString value;
+ if (!tokenizeKeyValue(df, src, key, value, lineNr)) {
+ break;
+ }
+ // some .desktop files still use the legacy ServiceTypes= key
+ if (key == QByteArrayLiteral("X-KDE-ServiceTypes") || key == QByteArrayLiteral("ServiceTypes")) {
+ const QString dotDesktop = QStringLiteral(".desktop");
+ const QChar slashChar(QLatin1Char('/'));
+ const auto serviceList = deserializeList(value);
+
+ for (const auto &service : serviceList) {
+ // Make up the filename from the service type name. This assumes consistent naming...
+ QString absFileName = locateRelativeServiceType(
+ service.toLower().replace(slashChar, QLatin1Char('-')) + dotDesktop);
+ if (absFileName.isEmpty()) {
+ absFileName = locateRelativeServiceType(
+ service.toLower().remove(slashChar) + dotDesktop);
+ }
+ if (absFileName.isEmpty()) {
+ qCWarning(DESKTOPPARSER) << "Unable to find service type for service" << service << "listed in" << src;
+ } else {
+ serviceTypeDef.addFile(absFileName);
+ }
+ }
+ break;
+ }
+ }
+ lineNr=0;
+ df.seek(startPos);
+
+ QJsonObject kplugin; // the "KPlugin" key of the metadata
+ //QJsonObject json;
+ while (!df.atEnd()) {
+ QByteArray key;
+ QString value;
+ if (!tokenizeKeyValue(df, src, key, value, lineNr)) {
+ break;
+ } else if (key.isEmpty()) {
+ continue;
+ }
+#ifdef BUILDING_DESKTOPTOJSON_TOOL
+ if (s_compatibilityMode) {
+ convertToCompatibilityJson(QString::fromUtf8(key), value, json, lineNr);
+ } else {
+ convertToJson(key, serviceTypeDef, value, json, kplugin, lineNr);
+ }
+#else
+ convertToJson(key, serviceTypeDef, value, json, kplugin, lineNr);
+#endif
+ if (libraryPath && key == QByteArrayLiteral("X-KDE-Library")) {
+ *libraryPath = value;
+ }
+ }
+ json[QStringLiteral("KPlugin")] = kplugin;
+ return true;
+}
+
--- /dev/null
+/******************************************************************************
+ * Copyright 2013-2014 Sebastian Kügler <sebas@kde.org> *
+ * Copyright 2014 Alex Richardson <arichardson.kde@gmail.com> *
+ * *
+ * This library is free software; you can redistribute it and/or *
+ * modify it under the terms of the GNU Lesser General Public *
+ * *
+ * License as published by the Free Software Foundation; either *
+ * version 2.1 of the License, or (at your option) version 3, or any *
+ * later version accepted by the membership of KDE e.V. (or its *
+ * successor approved by the membership of KDE e.V.), which shall *
+ * act as a proxy defined in Section 6 of version 3 of the license. *
+ * *
+ * This library is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
+ * Lesser General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Lesser General Public *
+ * License along with this library. If not, see *
+ * <http://www.gnu.org/licenses/>. *
+ * *
+ ******************************************************************************/
+
+#ifndef DESKTOPFILEPARSER_H
+#define DESKTOPFILEPARSER_H
+
+#include <QByteArray>
+#include <QLoggingCategory>
+#include <QVector>
+class QJsonObject;
+class QJsonValue;
+
+Q_DECLARE_LOGGING_CATEGORY(DESKTOPPARSER)
+
+struct CustomPropertyDefinition;
+struct ServiceTypeDefinition
+{
+ ServiceTypeDefinition();
+
+ static ServiceTypeDefinition fromFiles(const QStringList &paths);
+ /**
+ * @return @p value converted to the correct JSON type.
+ * If there is no custom property definition for @p key this will simply return the string value
+ */
+ QJsonValue parseValue(const QByteArray &key, const QString &value) const;
+
+ /**
+ * Parses the service file in @p path and extracts its definitions
+ *
+ * @returns whether the action could be performed
+ */
+ bool addFile(const QString &path);
+
+private:
+ QVector<CustomPropertyDefinition> m_definitions;
+};
+
+namespace DesktopFileParser
+{
+ QByteArray escapeValue(const QByteArray &input);
+ QStringList deserializeList(const QString &data, char separator = ',');
+ bool convert(const QString &src, const QStringList &serviceTypes, QJsonObject &json, QString *libraryPath);
+ void convertToJson(const QByteArray &key, ServiceTypeDefinition &serviceTypes, const QString &value,
+ QJsonObject &json, QJsonObject &kplugin, int lineNr);
+#ifdef BUILDING_DESKTOPTOJSON_TOOL
+ void convertToCompatibilityJson(const QString &key, const QString &value, QJsonObject &json, int lineNr);
+ extern bool s_verbose;
+ extern bool s_compatibilityMode;
+#endif
+}
+
+
+#endif // DESKTOPFILEPARSER_H
--- /dev/null
+/* This file is part of the KDE project
+ Copyright (C) 2007 Bernhard Loos <nhuh.put@web.de>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+#ifndef KEXPORTPLUGIN_H
+#define KEXPORTPLUGIN_H
+
+#include <QPluginLoader>
+#include <QtPlugin>
+#include <kcoreaddons_export.h>
+
+/**
+ * \relates KPluginLoader
+ * Use this macro if you want to give your plugin a version number.
+ * You can later access the version number with KPluginLoader::pluginVersion()
+ */
+#define K_EXPORT_PLUGIN_VERSION(version) \
+ Q_EXTERN_C Q_DECL_EXPORT const quint32 kde_plugin_version = version;
+
+/**
+ * \relates KPluginLoader
+ * This macro exports the main object of the plugin. Most times, this will be a KPluginFactory
+ * or derived class, but any QObject derived class can be used.
+ * Take a look at the documentation of Q_EXPORT_PLUGIN2 for some details.
+ */
+
+#if defined (Q_OS_WIN32) && defined(Q_CC_BOR)
+#define Q_STANDARD_CALL __stdcall
+#else
+#define Q_STANDARD_CALL
+
+#ifndef KCOREADDONS_NO_DEPRECATED
+class KCOREADDONS_DEPRECATED_EXPORT K_EXPORT_PLUGIN_is_deprecated_see_KDE5PORTING
+{
+};
+
+#define K_EXPORT_PLUGIN(factory) \
+ K_EXPORT_PLUGIN_is_deprecated_see_KDE5PORTING dummy;
+#endif
+
+#endif
+
+#endif // KEXPORTPLUGIN_H
+
--- /dev/null
+/* This file is part of the KDE project
+ Copyright (C) 2007 Matthias Kretz <kretz@kde.org>
+ Copyright (C) 2007 Bernhard Loos <nhuh.put@web.de>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+
+*/
+
+#include "kpluginfactory.h"
+#include "kpluginfactory_p.h"
+
+#include <QObjectCleanupHandler>
+#include "kcoreaddons_debug.h"
+
+Q_GLOBAL_STATIC(QObjectCleanupHandler, factorycleanup)
+
+extern int kLibraryDebugArea();
+
+KPluginFactory::KPluginFactory()
+ : d_ptr(new KPluginFactoryPrivate)
+{
+ Q_D(KPluginFactory);
+ d->q_ptr = this;
+
+ factorycleanup()->add(this);
+}
+
+KPluginFactory::KPluginFactory(KPluginFactoryPrivate &d)
+ : d_ptr(&d)
+{
+ factorycleanup()->add(this);
+}
+
+KPluginFactory::~KPluginFactory()
+{
+ delete d_ptr;
+}
+
+void KPluginFactory::registerPlugin(const QString &keyword, const QMetaObject *metaObject, CreateInstanceFunction instanceFunction)
+{
+ Q_D(KPluginFactory);
+
+ Q_ASSERT(metaObject);
+
+ // we allow different interfaces to be registered without keyword
+ if (!keyword.isEmpty()) {
+ if (d->createInstanceHash.contains(keyword)) {
+ qCWarning(KCOREADDONS_DEBUG) << "A plugin with the keyword" << keyword << "was already registered. A keyword must be unique!";
+ }
+ d->createInstanceHash.insert(keyword, KPluginFactoryPrivate::Plugin(metaObject, instanceFunction));
+ } else {
+ QList<KPluginFactoryPrivate::Plugin> clashes(d->createInstanceHash.values(keyword));
+ const QMetaObject *superClass = metaObject->superClass();
+ if (superClass) {
+ foreach (const KPluginFactoryPrivate::Plugin &plugin, clashes) {
+ for (const QMetaObject *otherSuper = plugin.first->superClass(); otherSuper;
+ otherSuper = otherSuper->superClass()) {
+ if (superClass == otherSuper) {
+ qCWarning(KCOREADDONS_DEBUG) << "Two plugins with the same interface(" << superClass->className() << ") were registered. Use keywords to identify the plugins.";
+ }
+ }
+ }
+ }
+ foreach (const KPluginFactoryPrivate::Plugin &plugin, clashes) {
+ superClass = plugin.first->superClass();
+ if (superClass) {
+ for (const QMetaObject *otherSuper = metaObject->superClass(); otherSuper;
+ otherSuper = otherSuper->superClass()) {
+ if (superClass == otherSuper) {
+ qCWarning(KCOREADDONS_DEBUG) << "Two plugins with the same interface(" << superClass->className() << ") were registered. Use keywords to identify the plugins.";
+ }
+ }
+ }
+ }
+ d->createInstanceHash.insertMulti(keyword, KPluginFactoryPrivate::Plugin(metaObject, instanceFunction));
+ }
+}
+
+#ifndef KCOREADDONS_NO_DEPRECATED
+QObject *KPluginFactory::createObject(QObject *parent, const char *className, const QStringList &args)
+{
+ Q_UNUSED(parent);
+ Q_UNUSED(className);
+ Q_UNUSED(args);
+ return nullptr;
+}
+#endif
+
+#ifndef KCOREADDONS_NO_DEPRECATED
+KParts::Part *KPluginFactory::createPartObject(QWidget *parentWidget, QObject *parent, const char *classname, const QStringList &args)
+{
+ Q_UNUSED(parent);
+ Q_UNUSED(parentWidget);
+ Q_UNUSED(classname);
+ Q_UNUSED(args);
+ return nullptr;
+}
+#endif
+
+QObject *KPluginFactory::create(const char *iface, QWidget *parentWidget, QObject *parent, const QVariantList &args, const QString &keyword)
+{
+ Q_D(KPluginFactory);
+
+ QObject *obj = nullptr;
+
+#ifndef KCOREADDONS_NO_DEPRECATED
+ if (keyword.isEmpty()) {
+
+ const QStringList argsStringList = variantListToStringList(args);
+
+ if ((obj = reinterpret_cast<QObject *>(createPartObject(parentWidget, parent, iface, argsStringList)))) {
+ objectCreated(obj);
+ return obj;
+ }
+
+ if ((obj = createObject(parent, iface, argsStringList))) {
+ objectCreated(obj);
+ return obj;
+ }
+ }
+#endif
+
+ const QList<KPluginFactoryPrivate::Plugin> candidates(d->createInstanceHash.values(keyword));
+ // for !keyword.isEmpty() candidates.count() is 0 or 1
+
+ foreach (const KPluginFactoryPrivate::Plugin &plugin, candidates) {
+ for (const QMetaObject *current = plugin.first; current; current = current->superClass()) {
+ if (0 == qstrcmp(iface, current->className())) {
+ if (obj) {
+ qCWarning(KCOREADDONS_DEBUG) << "ambiguous interface requested from a DSO containing more than one plugin";
+ }
+ obj = plugin.second(parentWidget, parent, args);
+ break;
+ }
+ }
+ }
+
+ if (obj) {
+ emit objectCreated(obj);
+ }
+ return obj;
+}
+
+QStringList KPluginFactory::variantListToStringList(const QVariantList &list)
+{
+ QStringList stringlist;
+ for (const QVariant &var : list) {
+ stringlist << var.toString();
+ }
+ return stringlist;
+}
+
+QVariantList KPluginFactory::stringListToVariantList(const QStringList &list)
+{
+ QVariantList variantlist;
+ for (const QString &str : list) {
+ variantlist << QVariant(str);
+ }
+ return variantlist;
+}
+
--- /dev/null
+/* This file is part of the KDE project
+ Copyright (C) 2007 Matthias Kretz <kretz@kde.org>
+ Copyright (C) 2007 Bernhard Loos <nhuh.put@web.de>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+
+*/
+
+#ifndef KPLUGINFACTORY_H
+#define KPLUGINFACTORY_H
+
+#include "kcoreaddons_export.h"
+
+#include <QObject>
+#include <QVariant>
+#include <QStringList>
+#include <kexportplugin.h> // for source compat
+
+class QWidget;
+
+class KPluginFactoryPrivate;
+namespace KParts
+{
+class Part;
+}
+
+#define KPluginFactory_iid "org.kde.KPluginFactory"
+
+#define K_PLUGIN_FACTORY_DECLARATION_WITH_BASEFACTORY_SKEL(name, baseFactory, ...) \
+ class name : public KPluginFactory \
+ { \
+ Q_OBJECT \
+ Q_INTERFACES(KPluginFactory) \
+ __VA_ARGS__ \
+ public: \
+ explicit name(); \
+ ~name(); \
+ };
+
+#define K_PLUGIN_FACTORY_DECLARATION_WITH_BASEFACTORY_JSON(name, baseFactory, json) \
+ K_PLUGIN_FACTORY_DECLARATION_WITH_BASEFACTORY_SKEL(name, baseFactory, Q_PLUGIN_METADATA(IID KPluginFactory_iid FILE json))
+
+#define K_PLUGIN_FACTORY_DECLARATION_WITH_BASEFACTORY(name, baseFactory) \
+ K_PLUGIN_FACTORY_DECLARATION_WITH_BASEFACTORY_SKEL(name, baseFactory, Q_PLUGIN_METADATA(IID KPluginFactory_iid))
+
+#define K_PLUGIN_FACTORY_DEFINITION_WITH_BASEFACTORY(name, baseFactory, pluginRegistrations) \
+ name::name() \
+ { \
+ pluginRegistrations \
+ } \
+ name::~name() {}
+
+#define K_PLUGIN_FACTORY_WITH_BASEFACTORY(name, baseFactory, pluginRegistrations) \
+ K_PLUGIN_FACTORY_DECLARATION_WITH_BASEFACTORY(name, baseFactory) \
+ K_PLUGIN_FACTORY_DEFINITION_WITH_BASEFACTORY(name, baseFactory, pluginRegistrations)
+
+#define K_PLUGIN_FACTORY_WITH_BASEFACTORY_JSON(name, baseFactory, jsonFile, pluginRegistrations) \
+ K_PLUGIN_FACTORY_DECLARATION_WITH_BASEFACTORY_JSON(name, baseFactory, jsonFile) \
+ K_PLUGIN_FACTORY_DEFINITION_WITH_BASEFACTORY(name, baseFactory, pluginRegistrations)
+
+/**
+ * \relates KPluginFactory
+ *
+ * Create a KPluginFactory subclass and export it as the root plugin object.
+ *
+ * \param name The name of the KPluginFactory derived class.
+ *
+ * \param pluginRegistrations Code to be inserted into the constructor of the
+ * class. Usually a series of registerPlugin() calls.
+ *
+ * @note K_PLUGIN_FACTORY declares the subclass including a Q_OBJECT macro.
+ * So you need to make sure to have Qt's moc run also for the source file
+ * where you use the macro. E.g. in projects using CMake and it's automoc feature,
+ * as usual you need to have a line
+ * @code
+ * #include <myplugin.moc>
+ * @endcode
+ * in the same source file when that one has the name "myplugin.cpp".
+ *
+ * Example:
+ * \code
+ * #include <KPluginFactory>
+ * #include <plugininterface.h>
+ *
+ * class MyPlugin : public PluginInterface
+ * {
+ * public:
+ * MyPlugin(QObject *parent, const QVariantList &args)
+ * : PluginInterface(parent)
+ * {}
+ * };
+ *
+ * K_PLUGIN_FACTORY(MyPluginFactory,
+ * registerPlugin<MyPlugin>();
+ * )
+ *
+ * #include <myplugin.moc>
+ * \endcode
+ *
+ * If you want to compile a .json file into the plugin, use K_PLUGIN_FACTORY_WITH_JSON.
+ *
+ * \see K_PLUGIN_FACTORY_WITH_JSON
+ * \see K_PLUGIN_FACTORY_DECLARATION
+ * \see K_PLUGIN_FACTORY_DEFINITION
+ */
+#define K_PLUGIN_FACTORY(name, pluginRegistrations) K_PLUGIN_FACTORY_WITH_BASEFACTORY(name, KPluginFactory, pluginRegistrations)
+
+/**
+ * \relates KPluginFactory
+ *
+ * Create a KPluginFactory subclass and export it as the root plugin object with
+ * JSON metadata.
+ *
+ * This macro does the same as K_PLUGIN_FACTORY, but adds a JSON file as plugin
+ * metadata. See Q_PLUGIN_METADATA() for more information.
+ *
+ * \param name The name of the KPluginFactory derived class.
+ *
+ * \param pluginRegistrations Code to be inserted into the constructor of the
+ * class. Usually a series of registerPlugin() calls.
+ *
+ * \param jsonFile Name of the json file to be compiled into the plugin as metadata
+ *
+ * @note K_PLUGIN_FACTORY_WITH_JSON declares the subclass including a Q_OBJECT macro.
+ * So you need to make sure to have Qt's moc run also for the source file
+ * where you use the macro. E.g. in projects using CMake and it's automoc feature,
+ * as usual you need to have a line
+ * @code
+ * #include <myplugin.moc>
+ * @endcode
+ * in the same source file when that one has the name "myplugin.cpp".
+ *
+ * Example:
+ * \code
+ * #include <KPluginFactory>
+ * #include <plugininterface.h>
+ *
+ * class MyPlugin : public PluginInterface
+ * {
+ * public:
+ * MyPlugin(QObject *parent, const QVariantList &args)
+ * : PluginInterface(parent)
+ * {}
+ * };
+ *
+ * K_PLUGIN_FACTORY_WITH_JSON(MyPluginFactory,
+ * "metadata.json",
+ * registerPlugin<MyPlugin>();
+ * )
+ *
+ * #include <myplugin.moc>
+ * \endcode
+ *
+ * \see K_PLUGIN_FACTORY
+ * \see K_PLUGIN_FACTORY_DECLARATION
+ * \see K_PLUGIN_FACTORY_DEFINITION
+ *
+ * @since 5.0
+ */
+#define K_PLUGIN_FACTORY_WITH_JSON(name, jsonFile, pluginRegistrations) K_PLUGIN_FACTORY_WITH_BASEFACTORY_JSON(name, KPluginFactory, jsonFile, pluginRegistrations)
+
+/**
+ * \relates KPluginFactory
+ *
+ * Create a KPluginFactory subclass and export it as the root plugin object with
+ * JSON metadata.
+ *
+ * This macro does the same as K_PLUGIN_FACTORY_WITH_JSON, but you only have to pass the class name and the json file.
+ * The factory name and registerPlugin call are deduced from the class name.
+ *
+ * @code
+ * #include <myplugin.moc>
+ * @endcode
+ * in the same source file when that one has the name "myplugin.cpp".
+ *
+ * Example:
+ * \code
+ * #include <KPluginFactory>
+ * #include <plugininterface.h>
+ *
+ * class MyPlugin : public PluginInterface
+ * {
+ * public:
+ * MyPlugin(QObject *parent, const QVariantList &args)
+ * : PluginInterface(parent)
+ * {}
+ * };
+ *
+ * K_PLUGIN_CLASS_WITH_JSON(MyPlugin, "metadata.json")
+ *
+ * #include <myplugin.moc>
+ * \endcode
+ *
+ * \see K_PLUGIN_FACTORY_WITH_JSON
+ *
+ * @since 5.44
+ */
+#define K_PLUGIN_CLASS_WITH_JSON(classname, jsonFile) K_PLUGIN_FACTORY_WITH_JSON(classname ## Factory, jsonFile, registerPlugin<classname >();)
+
+/**
+ * \relates KPluginFactory
+ *
+ * K_PLUGIN_FACTORY_DECLARATION declares the KPluginFactory subclass. This macro
+ * can be used in a header file.
+ *
+ * \param name The name of the KPluginFactory derived class.
+ *
+ * \see K_PLUGIN_FACTORY
+ * \see K_PLUGIN_FACTORY_DEFINITION
+ */
+#define K_PLUGIN_FACTORY_DECLARATION(name) K_PLUGIN_FACTORY_DECLARATION_WITH_BASEFACTORY(name, KPluginFactory)
+
+/**
+ * \relates KPluginFactory
+ * K_PLUGIN_FACTORY_DEFINITION defines the KPluginFactory subclass. This macro
+ * can <b>not</b> be used in a header file.
+ *
+ * \param name The name of the KPluginFactory derived class.
+ *
+ * \param pluginRegistrations Code to be inserted into the constructor of the
+ * class. Usually a series of registerPlugin() calls.
+ *
+ * \see K_PLUGIN_FACTORY
+ * \see K_PLUGIN_FACTORY_DECLARATION
+ */
+#define K_PLUGIN_FACTORY_DEFINITION(name, pluginRegistrations) K_PLUGIN_FACTORY_DEFINITION_WITH_BASEFACTORY(name, KPluginFactory, pluginRegistrations)
+
+/**
+ * \class KPluginFactory kpluginfactory.h <KPluginFactory>
+ *
+ * KPluginFactory provides a convenient way to provide factory-style plugins.
+ * Qt plugins provide a singleton object, but a common pattern is for plugins
+ * to generate as many objects of a particular type as the application requires.
+ * By using KPluginFactory, you can avoid implementing the factory pattern
+ * yourself.
+ *
+ * KPluginFactory also allows plugins to provide multiple different object
+ * types, indexed by keywords.
+ *
+ * The objects created by KPluginFactory must inherit QObject, and must have a
+ * standard constructor pattern:
+ * \li if the object is a KPart::Part, it must be of the form
+ * \code
+ * T(QWidget *parentWidget, QObject *parent, const QVariantList &args)
+ * \endcode
+ * \li if it is a QWidget, it must be of the form
+ * \code
+ * T(QWidget *parent, const QVariantList &args)
+ * \endcode
+ * \li otherwise it must be of the form
+ * \code
+ * T(QObject *parent, const QVariantList &args)
+ * \endcode
+ *
+ * You should typically use either K_PLUGIN_FACTORY() or
+ * K_PLUGIN_FACTORY_WITH_JSON() in your plugin code to create the factory. The
+ * typical pattern is
+ *
+ * \code
+ * #include <KPluginFactory>
+ * #include <plugininterface.h>
+ *
+ * class MyPlugin : public PluginInterface
+ * {
+ * public:
+ * MyPlugin(QObject *parent, const QVariantList &args)
+ * : PluginInterface(parent)
+ * {}
+ * };
+ *
+ * K_PLUGIN_FACTORY(MyPluginFactory,
+ * registerPlugin<MyPlugin>();
+ * )
+ * #include <myplugin.moc>
+ * \endcode
+ *
+ * If you want to write a custom KPluginFactory not using the standard macro(s)
+ * you can reimplement the
+ * create(const char *iface, QWidget *parentWidget, QObject *parent, const QVariantList &args, const QString &keyword)
+ * method.
+ *
+ * Example:
+ * \code
+ * class SomeScriptLanguageFactory : public KPluginFactory
+ * {
+ * Q_OBJECT
+ * public:
+ * SomeScriptLanguageFactory()
+ * {}
+ *
+ * protected:
+ * virtual QObject *create(const char *iface, QWidget *parentWidget, QObject *parent, const QVariantList &args, const QString &keyword)
+ * {
+ * const QString identifier = QLatin1String(iface) + QLatin1Char('_') + keyword;
+ * // load scripting language module from the information in identifier
+ * // and return it:
+ * return object;
+ * }
+ * };
+ * \endcode
+ *
+ * If you want to load a library use KPluginLoader.
+ * The application that wants to instantiate plugin classes can do the following:
+ * \code
+ * KPluginFactory *factory = KPluginLoader("libraryname").factory();
+ * if (factory) {
+ * PluginInterface *p1 = factory->create<PluginInterface>(parent);
+ * OtherInterface *p2 = factory->create<OtherInterface>(parent);
+ * NextInterface *p3 = factory->create<NextInterface>("keyword1", parent);
+ * NextInterface *p3 = factory->create<NextInterface>("keyword2", parent);
+ * }
+ * \endcode
+ *
+ * \author Matthias Kretz <kretz@kde.org>
+ * \author Bernhard Loos <nhuh.put@web.de>
+ */
+class KCOREADDONS_EXPORT KPluginFactory : public QObject
+{
+ Q_OBJECT
+ Q_DECLARE_PRIVATE(KPluginFactory)
+public:
+ /**
+ * This constructor creates a factory for a plugin.
+ */
+ explicit KPluginFactory();
+
+ /**
+ * This destroys the PluginFactory.
+ */
+ ~KPluginFactory() override;
+
+ /**
+ * Use this method to create an object. It will try to create an object which inherits
+ * \p T. If it has multiple choices it's not defined which object will be returned, so be careful
+ * to request a unique interface or use keywords.
+ *
+ * \tparam T The interface for which an object should be created. The object will inherit \p T.
+ * \param parent The parent of the object. If \p parent is a widget type, it will also passed
+ * to the parentWidget argument of the CreateInstanceFunction for the object.
+ * \param args Additional arguments which will be passed to the object.
+ * \returns A pointer to the created object is returned, or @c nullptr if an error occurred.
+ */
+ template<typename T>
+ T *create(QObject *parent = nullptr, const QVariantList &args = QVariantList());
+
+ /**
+ * Use this method to create an object. It will try to create an object which inherits
+ * \p T and was registered with \p keyword.
+ *
+ * \tparam T The interface for which an object should be created. The object will inherit \p T.
+ * \param keyword The keyword of the object.
+ * \param parent The parent of the object. If \p parent is a widget type, it will also passed
+ * to the parentWidget argument of the CreateInstanceFunction for the object.
+ * \param args Additional arguments which will be passed to the object.
+ * \returns A pointer to the created object is returned, or @c nullptr if an error occurred.
+ */
+ template<typename T>
+ T *create(const QString &keyword, QObject *parent = nullptr, const QVariantList &args = QVariantList());
+
+ /**
+ * Use this method to create an object. It will try to create an object which inherits
+ * \p T and was registered with \p keyword.
+ * This overload has an additional \p parentWidget argument, which is used by some plugins (e.g. Parts).
+
+ * \tparam T The interface for which an object should be created. The object will inherit \p T.
+ * \param parentWidget An additional parent widget.
+ * \param parent The parent of the object. If \p parent is a widget type, it will also passed
+ * to the parentWidget argument of the CreateInstanceFunction for the object.
+ * \param keyword The keyword of the object.
+ * \param args Additional arguments which will be passed to the object.
+ * \returns A pointer to the created object is returned, or @c nullptr if an error occurred.
+ */
+ template<typename T>
+ T *create(QWidget *parentWidget, QObject *parent, const QString &keyword = QString(), const QVariantList &args = QVariantList());
+
+ /**
+ * @deprecated since 4.0 use create<T>(QObject *parent, const QVariantList &args)
+ */
+#ifndef KCOREADDONS_NO_DEPRECATED
+ template<typename T>
+ KCOREADDONS_DEPRECATED
+ T *create(QObject *parent, const QStringList &args)
+ {
+ return create<T>(parent, stringListToVariantList(args));
+ }
+#endif
+
+ /**
+ * @deprecated since 4.0 use create<T>(QObject *parent, const QVariantList &args)
+ */
+#ifndef KCOREADDONS_NO_DEPRECATED
+ KCOREADDONS_DEPRECATED QObject *create(QObject *parent = nullptr, const char *classname = "QObject", const QStringList &args = QStringList())
+ {
+ return create(classname, nullptr, parent, stringListToVariantList(args), QString());
+ }
+#endif
+
+ /**
+ * \internal
+ * Converts a QStringList to a QVariantList
+ */
+ static QVariantList stringListToVariantList(const QStringList &list);
+
+ /**
+ * \internal
+ * Converts a QVariantList of strings to a QStringList
+ */
+ static QStringList variantListToStringList(const QVariantList &list);
+
+Q_SIGNALS:
+ void objectCreated(QObject *object);
+
+protected:
+ /**
+ * Function pointer type to a function that instantiates a plugin.
+ */
+ typedef QObject *(*CreateInstanceFunction)(QWidget *, QObject *, const QVariantList &);
+
+ /**
+ * This is used to detect the arguments need for the constructor of plugin classes.
+ * You can inherit it, if you want to add new classes and still keep support for the old ones.
+ */
+ template<class impl>
+ struct InheritanceChecker {
+ CreateInstanceFunction createInstanceFunction(KParts::Part *)
+ {
+ return &createPartInstance<impl>;
+ }
+ CreateInstanceFunction createInstanceFunction(QWidget *)
+ {
+ return &createInstance<impl, QWidget>;
+ }
+ CreateInstanceFunction createInstanceFunction(...)
+ {
+ return &createInstance<impl, QObject>;
+ }
+ };
+
+ explicit KPluginFactory(KPluginFactoryPrivate &dd);
+
+ /**
+ * Registers a plugin with the factory. Call this function from the constructor of the
+ * KPluginFactory subclass to make the create function able to instantiate the plugin when asked
+ * for an interface the plugin implements.
+ *
+ * You can register as many plugin classes as you want as long as either the plugin interface or
+ * the \p keyword makes it unique. E.g. it is possible to register a KCModule and a
+ * KParts::Part without having to specify keywords since their interfaces differ.
+ *
+ * \tparam T the name of the plugin class
+ *
+ * \param keyword An optional keyword as unique identifier for the plugin. This allows you to
+ * put more than one plugin with the same interface into the same library using the same
+ * factory. X-KDE-PluginKeyword is a convenient way to specify the keyword in a desktop file.
+ *
+ * \param instanceFunction A function pointer to a function that creates an instance of the
+ * plugin. The default function that will be used depends on the type of interface. If the
+ * interface inherits from
+ * \li \c KParts::Part the function will call
+ * \code
+ * new T(QWidget *parentWidget, QObject *parent, const QVariantList &args)
+ * \endcode
+ * \li \c QWidget the function will call
+ * \code
+ * new T(QWidget *parent, const QVariantList &args)
+ * \endcode
+ * \li else the function will call
+ * \code
+ * new T(QObject *parent, const QVariantList &args)
+ * \endcode
+ */
+ template<class T>
+ void registerPlugin(const QString &keyword = QString(), CreateInstanceFunction instanceFunction
+ = InheritanceChecker<T>().createInstanceFunction(reinterpret_cast<T *>(0)))
+ {
+ registerPlugin(keyword, &T::staticMetaObject, instanceFunction);
+ }
+
+ KPluginFactoryPrivate *const d_ptr;
+
+ /**
+ * @deprecated since 4.0 use create<T>(QObject *parent, const QVariantList &args)
+ */
+#ifndef KCOREADDONS_NO_DEPRECATED
+ virtual KCOREADDONS_DEPRECATED QObject *createObject(QObject *parent, const char *className, const QStringList &args);
+#endif
+
+ /**
+ * @deprecated since 4.0 use create<T>(QWidget *parentWidget, QObject *parent, const QString &keyword, const QVariantList &args)
+ */
+#ifndef KCOREADDONS_NO_DEPRECATED
+ virtual KCOREADDONS_DEPRECATED KParts::Part *createPartObject(QWidget *parentWidget, QObject *parent, const char *classname, const QStringList &args);
+#endif
+
+ /**
+ * This function is called when the factory asked to create an Object.
+ *
+ * You may reimplement it to provide a very flexible factory. This is especially useful to
+ * provide generic factories for plugins implemented using a scripting language.
+ *
+ * \param iface The staticMetaObject::className() string identifying the plugin interface that
+ * was requested. E.g. for KCModule plugins this string will be "KCModule".
+ * \param parentWidget Only used if the requested plugin is a KPart.
+ * \param parent The parent object for the plugin object.
+ * \param args A plugin specific list of arbitrary arguments.
+ * \param keyword A string that uniquely identifies the plugin. If a KService is used this
+ * keyword is read from the X-KDE-PluginKeyword entry in the .desktop file.
+ */
+ virtual QObject *create(const char *iface, QWidget *parentWidget, QObject *parent, const QVariantList &args, const QString &keyword);
+
+ template<class impl, class ParentType>
+ static QObject *createInstance(QWidget *parentWidget, QObject *parent, const QVariantList &args)
+ {
+ Q_UNUSED(parentWidget);
+ ParentType *p = nullptr;
+ if (parent) {
+ p = qobject_cast<ParentType *>(parent);
+ Q_ASSERT(p);
+ }
+ return new impl(p, args);
+ }
+
+ template<class impl>
+ static QObject *createPartInstance(QWidget *parentWidget, QObject *parent, const QVariantList &args)
+ {
+ return new impl(parentWidget, parent, args);
+ }
+
+private:
+ void registerPlugin(const QString &keyword, const QMetaObject *metaObject, CreateInstanceFunction instanceFunction);
+};
+
+typedef KPluginFactory KLibFactory;
+
+template<typename T>
+inline T *KPluginFactory::create(QObject *parent, const QVariantList &args)
+{
+ QObject *o = create(T::staticMetaObject.className(), parent && parent->isWidgetType() ? reinterpret_cast<QWidget *>(parent) : nullptr, parent, args, QString());
+
+ T *t = qobject_cast<T *>(o);
+ if (!t) {
+ delete o;
+ }
+ return t;
+}
+
+template<typename T>
+inline T *KPluginFactory::create(const QString &keyword, QObject *parent, const QVariantList &args)
+{
+ QObject *o = create(T::staticMetaObject.className(), parent && parent->isWidgetType() ? reinterpret_cast<QWidget *>(parent) : nullptr, parent, args, keyword);
+
+ T *t = qobject_cast<T *>(o);
+ if (!t) {
+ delete o;
+ }
+ return t;
+}
+
+template<typename T>
+inline T *KPluginFactory::create(QWidget *parentWidget, QObject *parent, const QString &keyword, const QVariantList &args)
+{
+ QObject *o = create(T::staticMetaObject.className(), parentWidget, parent, args, keyword);
+
+ T *t = qobject_cast<T *>(o);
+ if (!t) {
+ delete o;
+ }
+ return t;
+}
+
+Q_DECLARE_INTERFACE(KPluginFactory, KPluginFactory_iid)
+
+#endif // KPLUGINFACTORY_H
--- /dev/null
+/* This file is part of the KDE project
+ Copyright (C) 2007 Matthias Kretz <kretz@kde.org>
+ Copyright (C) 2007 Bernhard Loos <nhuh.put@web.de>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+
+*/
+
+#ifndef KPLUGINFACTORY_P_H
+#define KPLUGINFACTORY_P_H
+
+#include "kpluginfactory.h"
+
+#include <QHash>
+
+class KPluginFactoryPrivate
+{
+ Q_DECLARE_PUBLIC(KPluginFactory)
+protected:
+ typedef QPair<const QMetaObject *, KPluginFactory::CreateInstanceFunction> Plugin;
+
+ KPluginFactoryPrivate() : catalogInitialized(false) {}
+ ~KPluginFactoryPrivate()
+ {
+ }
+
+ QHash<QString, Plugin> createInstanceHash;
+ QString catalogName;
+ bool catalogInitialized;
+
+ KPluginFactory *q_ptr;
+};
+
+#endif // KPLUGINFACTORY_P_H
--- /dev/null
+/* This file is part of the KDE project
+ Copyright (C) 2007 Bernhard Loos <nhuh.put@web.de>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include "kpluginloader.h"
+
+#include "kpluginfactory.h"
+#include "kpluginmetadata.h"
+
+#include <QLibrary>
+#include <QDir>
+#include <QDirIterator>
+#include <QFileInfo>
+#include "kcoreaddons_debug.h"
+#include <QCoreApplication>
+#include <QMutex>
+
+// TODO: Upstream the versioning stuff to Qt
+// TODO: Patch for Qt to expose plugin-finding code directly
+// TODO: Add a convenience method to KFactory to replace KPluginLoader::factory()
+// TODO: (after the above) deprecate this class
+
+class KPluginLoaderPrivate
+{
+ Q_DECLARE_PUBLIC(KPluginLoader)
+protected:
+ KPluginLoaderPrivate(const QString &libname)
+ : name(libname),
+ loader(nullptr),
+ pluginVersion(~0U),
+ pluginVersionResolved(false)
+ {}
+ ~KPluginLoaderPrivate()
+ {}
+
+ KPluginLoader *q_ptr;
+ const QString name;
+ QString errorString;
+ QPluginLoader *loader;
+ quint32 pluginVersion;
+ bool pluginVersionResolved;
+};
+
+QString KPluginLoader::findPlugin(const QString &name)
+{
+ // We just defer to Qt; unfortunately, QPluginLoader's searching code is not
+ // accessible without creating a QPluginLoader object.
+
+ // Workaround for QTBUG-39642
+ static QMutex s_qtWorkaroundMutex;
+ QMutexLocker lock(&s_qtWorkaroundMutex);
+
+ QPluginLoader loader(name);
+ return loader.fileName();
+}
+
+KPluginLoader::KPluginLoader(const QString &plugin, QObject *parent)
+ : QObject(parent),
+ d_ptr(new KPluginLoaderPrivate(plugin))
+{
+ d_ptr->q_ptr = this;
+ Q_D(KPluginLoader);
+
+ d->loader = new QPluginLoader(plugin, this);
+}
+
+KPluginLoader::KPluginLoader(const KPluginName &pluginName, QObject *parent)
+ : QObject(parent),
+ d_ptr(new KPluginLoaderPrivate(pluginName.name()))
+{
+ d_ptr->q_ptr = this;
+ Q_D(KPluginLoader);
+
+ d->loader = new QPluginLoader(this);
+
+ if (pluginName.isValid()) {
+ d->loader->setFileName(pluginName.name());
+ if (d->loader->fileName().isEmpty()) {
+ qCWarning(KCOREADDONS_DEBUG) << "Error loading plugin" << pluginName.name() << d->loader->errorString() << endl
+ << "Plugin search paths are" << QCoreApplication::libraryPaths() << endl
+ << "The environment variable QT_PLUGIN_PATH might be not correctly set";
+ }
+ } else {
+ d->errorString = pluginName.errorString();
+ }
+}
+
+KPluginLoader::~KPluginLoader()
+{
+ delete d_ptr;
+}
+
+KPluginFactory *KPluginLoader::factory()
+{
+ Q_D(KPluginLoader);
+
+ QObject *obj = instance();
+
+ if (!obj) {
+ return nullptr;
+ }
+
+ KPluginFactory *factory = qobject_cast<KPluginFactory *>(obj);
+
+ if (factory == nullptr) {
+ qCDebug(KCOREADDONS_DEBUG) << "Expected a KPluginFactory, got a" << obj->metaObject()->className();
+ delete obj;
+ d->errorString = tr("The library %1 does not offer a KPluginFactory.").arg(d->name);
+ }
+
+ return factory;
+}
+
+quint32 KPluginLoader::pluginVersion()
+{
+ Q_D(const KPluginLoader);
+
+ if (!load()) {
+ return qint32(-1);
+ }
+ return d->pluginVersion;
+}
+
+QString KPluginLoader::pluginName() const
+{
+ Q_D(const KPluginLoader);
+
+ return d->name;
+}
+
+QString KPluginLoader::errorString() const
+{
+ Q_D(const KPluginLoader);
+
+ if (!d->errorString.isEmpty()) {
+ return d->errorString;
+ }
+
+ return d->loader->errorString();
+}
+
+QString KPluginLoader::fileName() const
+{
+ Q_D(const KPluginLoader);
+ return d->loader->fileName();
+}
+
+QObject *KPluginLoader::instance()
+{
+ Q_D(const KPluginLoader);
+
+ if (!load()) {
+ return nullptr;
+ }
+
+ return d->loader->instance();
+}
+
+bool KPluginLoader::isLoaded() const
+{
+ Q_D(const KPluginLoader);
+
+ return d->loader->isLoaded() && d->pluginVersionResolved;
+}
+
+bool KPluginLoader::load()
+{
+ Q_D(KPluginLoader);
+
+ if (!d->loader->load()) {
+ return false;
+ }
+
+ if (d->pluginVersionResolved) {
+ return true;
+ }
+
+ Q_ASSERT(!fileName().isEmpty());
+ QLibrary lib(fileName());
+ Q_ASSERT(lib.isLoaded()); // already loaded by QPluginLoader::load()
+
+ // TODO: this messes up KPluginLoader::errorString(): it will change from unknown error to could not resolve kde_plugin_version
+ quint32 *version = reinterpret_cast<quint32 *>(lib.resolve("kde_plugin_version"));
+ if (version) {
+ d->pluginVersion = *version;
+ } else {
+ d->pluginVersion = ~0U;
+ }
+ d->pluginVersionResolved = true;
+
+ return true;
+}
+
+QLibrary::LoadHints KPluginLoader::loadHints() const
+{
+ Q_D(const KPluginLoader);
+
+ return d->loader->loadHints();
+}
+
+QJsonObject KPluginLoader::metaData() const
+{
+ Q_D(const KPluginLoader);
+
+ return d->loader->metaData();
+}
+
+void KPluginLoader::setLoadHints(QLibrary::LoadHints loadHints)
+{
+ Q_D(KPluginLoader);
+
+ d->loader->setLoadHints(loadHints);
+}
+
+bool KPluginLoader::unload()
+{
+ Q_D(KPluginLoader);
+
+ // Even if *this* call does not unload it, another might,
+ // so we err on the side of re-resolving the version.
+ d->pluginVersionResolved = false;
+
+ return d->loader->unload();
+}
+
+
+void KPluginLoader::forEachPlugin(const QString &directory, std::function<void(const QString &)> callback)
+{
+ QStringList dirsToCheck;
+ if (QDir::isAbsolutePath(directory)) {
+ dirsToCheck << directory;
+ } else {
+ foreach (const QString &libDir, QCoreApplication::libraryPaths()) {
+ dirsToCheck << libDir + QLatin1Char('/') + directory;
+ }
+ }
+
+ qCDebug(KCOREADDONS_DEBUG) << "Checking for plugins in" << dirsToCheck;
+
+ foreach (const QString &dir, dirsToCheck) {
+ QDirIterator it(dir, QDir::Files);
+ while (it.hasNext()) {
+ it.next();
+ if (QLibrary::isLibrary(it.fileName())) {
+ callback(it.fileInfo().absoluteFilePath());
+ }
+ }
+ }
+}
+
+QVector<KPluginMetaData> KPluginLoader::findPlugins(const QString &directory, std::function<bool(const KPluginMetaData &)> filter)
+{
+ QVector<KPluginMetaData> ret;
+ forEachPlugin(directory, [&](const QString &pluginPath) {
+ KPluginMetaData metadata(pluginPath);
+ if (!metadata.isValid()) {
+ return;
+ }
+ if (filter && !filter(metadata)) {
+ return;
+ }
+ ret.append(metadata);
+ });
+ return ret;
+}
+
+QVector< KPluginMetaData > KPluginLoader::findPluginsById(const QString& directory, const QString& pluginId)
+{
+ auto filter = [&pluginId](const KPluginMetaData &md) -> bool
+ {
+ return md.pluginId() == pluginId;
+ };
+ return KPluginLoader::findPlugins(directory, filter);
+}
+
+QList<QObject *> KPluginLoader::instantiatePlugins(const QString &directory,
+ std::function<bool(const KPluginMetaData &)> filter, QObject* parent)
+{
+ QList<QObject *> ret;
+ QPluginLoader loader;
+ foreach (const KPluginMetaData &metadata, findPlugins(directory, filter)) {
+ loader.setFileName(metadata.fileName());
+ QObject* obj = loader.instance();
+ if (!obj) {
+ qCWarning(KCOREADDONS_DEBUG).nospace() << "Could not instantiate plugin \"" << metadata.fileName() << "\": "
+ << loader.errorString();
+ continue;
+ }
+ obj->setParent(parent);
+ ret.append(obj);
+ }
+ return ret;
+}
--- /dev/null
+/* This file is part of the KDE project
+ Copyright (C) 2007 Bernhard Loos <nhuh.put@web.de>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+#ifndef KPLUGINLOADER_H
+#define KPLUGINLOADER_H
+
+#include <kexportplugin.h>
+
+#include <QPluginLoader>
+#include <QtPlugin>
+
+#include <functional>
+
+class KPluginFactory;
+class KPluginMetaData;
+
+class KPluginLoaderPrivate;
+class KPluginName;
+
+/**
+ * \class KPluginLoader kpluginloader.h <KPluginLoader>
+ *
+ * This class behaves largely like QPluginLoader (and, indeed, uses it
+ * internally), but additionally reads the plugin version, as provided by the
+ * K_EXPORT_PLUGIN_VERSION macro (see pluginVersion()) and provides access to a
+ * KPluginFactory instance if the plugin provides one (see factory())
+ *
+ * Note that the factory() is a typesafe convenience method that just wraps a
+ * qobject_cast on the result of QPluginLoader::instance(). Therefore, if you do
+ * not need the plugin version feature, you can (and should) just use
+ * QPluginLoader instead.
+ *
+ * Unlike QPluginLoader, it is not possible to re-use KPluginLoader for more
+ * than one plugin (it provides no setFileName method).
+ *
+ * The same notes and caveats that apply to QPluginLoader also apply to
+ * KPluginLoader.
+ *
+ * Sample code:
+ * \code
+ * KPluginLoader loader( ...library or kservice... );
+ * KPluginFactory* factory = loader.factory();
+ * if (!factory) {
+ * qWarning() << "Error loading plugin:" << loader.errorString();
+ * } else {
+ * MyInterface* obj = factory->create<MyInterface>();
+ * if (!obj) {
+ * qWarning() << "Error creating object";
+ * }
+ * }
+ * \endcode
+ *
+ * \see KPluginFactory
+ *
+ * \author Bernhard Loos <nhuh.put@web.de>
+ */
+class KCOREADDONS_EXPORT KPluginLoader : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QString fileName READ fileName)
+ Q_PROPERTY(QLibrary::LoadHints loadHints READ loadHints WRITE setLoadHints)
+ Q_PROPERTY(QString pluginName READ pluginName)
+ Q_PROPERTY(quint32 pluginVersion READ pluginVersion)
+public:
+ /**
+ * Load a plugin by name.
+ *
+ * This should be the name of the plugin object file, without any suffix
+ * (like .so or .dll). Plugin object files should not have a 'lib' prefix.
+ *
+ * fileName() will be empty if the plugin could not be found.
+ *
+ * \param plugin The name of the plugin.
+ * \param parent A parent object.
+ */
+ explicit KPluginLoader(const QString &plugin, QObject *parent = nullptr);
+
+ /**
+ * Load a plugin by name.
+ *
+ * This constructor behaves exactly the same as
+ * KPluginLoader(const QString&,QObject*). It allows any class that can be
+ * cast to KPluginName (such as KService) to be passed to KPluginLoader.
+ *
+ * \param name The name of the plugin.
+ * \param parent A parent object.
+ */
+ explicit KPluginLoader(const KPluginName &name, QObject *parent = nullptr);
+
+ /**
+ * Destroys the plugin loader.
+ *
+ * Unless unload() was called explicitly, the plugin stays in memory until
+ * the application terminates.
+ */
+ ~KPluginLoader();
+
+ /**
+ * Returns the factory object of the plugin.
+ *
+ * This is typically created by one of the KPluginFactory macros.
+ * Internally, this uses QPluginLoader::instance(), and the same
+ * behaviours apply.
+ *
+ * \returns The factory of the plugin or @c nullptr on error.
+ */
+ KPluginFactory *factory();
+
+ /**
+ * Returns the name of this plugin as given to the constructor.
+ *
+ * If the KService constructor was used, this is the name of the library
+ * provided by the service.
+ *
+ * \returns The plugin name.
+ *
+ * \see fileName()
+ */
+ QString pluginName() const;
+
+ /**
+ * Returns the plugin version.
+ *
+ * This will load the plugin if it is not already loaded.
+ *
+ * \returns The version given to K_EXPORT_PLUGIN_VERSION, or (quint32) -1 if
+ * the macro was not used or the plugin could not be loaded.
+ */
+ quint32 pluginVersion();
+
+ /**
+ * Locates a plugin.
+ *
+ * Searches for a dynamic object file in the locations KPluginLoader and
+ * QPluginLoader would search (ie: the current directory and
+ * QCoreApplication::libraryPaths()).
+ *
+ * This can be useful if you wish to use a plugin that does not conform to
+ * the Qt plugin scheme of providing a QObject that declares
+ * Q_PLUGIN_METADATA. In this case, you can find the plugin with this
+ * method, and load it with QLibrary.
+ *
+ * Note that the path is not necessarily absolute. In particular, if the
+ * plugin is found in the current directory, it will be a relative path.
+ *
+ * \param name The name of the plugin (can be a relative path; see above).
+ * This should not include a file extension (like .so or .dll).
+ * \returns The path to the plugin if it was found, or QString() if it
+ * could not be found.
+ *
+ * @since 5.0
+ */
+ static QString findPlugin(const QString &name);
+
+ /**
+ * Returns the last error.
+ *
+ * \returns The description of the last error.
+ *
+ * \see QPluginLoader::errorString()
+ */
+ QString errorString() const;
+
+ /**
+ * Returns the path of the plugin.
+ *
+ * This will be the full path of the plugin if it was found, and empty if
+ * it could not be found.
+ *
+ * \returns The full path of the plugin, or the null string if it could
+ * not be found.
+ *
+ * \see QPluginLoader::fileName(), pluginName()
+ */
+ QString fileName() const;
+
+ /**
+ * Returns the root object of the plugin.
+ *
+ * The plugin will be loaded if necessary. If the plugin used one of the
+ * KPluginFactory macros, you should use factory() instead.
+ *
+ * \returns The plugin's root object.
+ *
+ * \see QPluginLoader::instance()
+ */
+ QObject *instance();
+
+ /**
+ * Determines whether the plugin is loaded.
+ *
+ * \returns @c True if the plugin is loaded, @c false otherwise.
+ *
+ * \see QPluginLoader::isLoaded()
+ */
+ bool isLoaded() const;
+
+ /**
+ * Loads the plugin.
+ *
+ * It is safe to call this multiple times; if the plugin was already loaded,
+ * it will just return @c true.
+ *
+ * Methods that require the plugin to be loaded will load it as necessary
+ * anyway, so you do not normally need to call this method.
+ *
+ * \returns @c True if the plugin was loaded successfully, @c false
+ * otherwise.
+ *
+ * \see QPluginLoader::load()
+ */
+ bool load();
+
+ /**
+ * Returns the load hints for the plugin.
+ *
+ * Determines how load() should work. See QLibrary::loadHints for more
+ * information.
+ *
+ * \returns The load hints for the plugin.
+ *
+ * \see QPluginLoader::loadHints(), setLoadHints()
+ */
+ QLibrary::LoadHints loadHints() const;
+
+ /**
+ * Returns the meta data for the plugin.
+ *
+ * \returns A JSON object containing the plugin's metadata, if found.
+ *
+ * \see QPluginLoader::metaData()
+ */
+ QJsonObject metaData() const;
+
+ /**
+ * Set the load hints for the plugin.
+ *
+ * Determines how load() should work. See QLibrary::loadHints for more
+ * information.
+ *
+ * \param loadHints The load hints for the plugin.
+ *
+ * \see QPluginLoader::setLoadHints(), loadHints()
+ */
+ void setLoadHints(QLibrary::LoadHints loadHints);
+
+ /**
+ * Attempts to unload the plugin.
+ *
+ * If other instances of KPluginLoader or QPluginLoader are using the same
+ * plugin, this will fail; unloading will only happen when every instance
+ * has called unload().
+ *
+ * \returns @c True if the plugin was unloaded, @c false otherwise.
+ *
+ * \see QPluginLoader::unload(), load(), instance(), factory()
+ */
+ bool unload();
+
+ /**
+ * Finds and instantiates (by calling QPluginLoader::instance()) all plugins from a given
+ * directory. Only plugins which have JSON metadata will be considered. A filter can be passed
+ * which determines which of the found plugins should actually be loaded.
+ *
+ * If you use KConfig you could have a group "Plugins" in your configuration file with the
+ * plugin name as the key and true/false as the value to indicate whether the plugin should
+ * be loaded. In order to easily load all the enable plugins you could use the following code:
+ * @code
+ * KConfigGroup pluginGroup = KSharedConfig::openConfig()->group("Plugins");
+ * auto filter = [&](const KPluginMetaData &md) {
+ * if (!pluginGroup.hasKey(md.pluginName())) {
+ * return md.isEnabledByDefault();
+ * } else {
+ * return pluginGroup.readEntry(md.pluginName(), false);
+ * }
+ * };
+ * QList<QObject*> plugins = KPluginLoader::instantiatePlugins("myapp", filter);
+ * @endcode
+ *
+ * @param directory the directory to search for plugins. If a relative path is given for @p directory,
+ * all entries of QCoreApplication::libraryPaths() will be checked with @p directory appended as a
+ * subdirectory. If an absolute path is given only that directory will be searched.
+ *
+ * @param filter a callback function that returns @c true if the found plugin should be loaded
+ * and @c false if it should be skipped. If this argument is omitted all plugins will be loaded.
+ *
+ * @param parent the parent to set for the instantiated plugins, if the
+ * plugins were not already loaded.
+ *
+ * @note If the plugins have been previously loaded (via QPluginLoader,
+ * directly or due to this class) without being deleted in the meantime
+ * then they are not re-created or re-parented and will be returned using
+ * the parent they were originally created with. @sa
+ * QPluginLoader::instance().
+ *
+ * @return a list containing an instantiation of each plugin that met the filter criteria
+ *
+ * @see KPluginLoader::findPlugins()
+ *
+ * @since 5.1
+ */
+ static QList<QObject *> instantiatePlugins(const QString &directory,
+ std::function<bool(const KPluginMetaData &)> filter = std::function<bool(const KPluginMetaData &)>(),
+ QObject* parent = nullptr);
+
+ /**
+ * Find all plugins inside @p directory. Only plugins which have JSON metadata will be considered.
+ *
+ * @param directory The directory to search for plugins. If a relative path is given for @p directory,
+ * all entries of QCoreApplication::libraryPaths() will be checked with @p directory appended as a
+ * subdirectory. If an absolute path is given only that directory will be searched.
+ *
+ * @param filter a callback function that returns @c true if the found plugin should be loaded
+ * and @c false if it should be skipped. If this argument is omitted all plugins will be loaded.
+ *
+ * @return all plugins found in @p directory that fulfil the constraints of @p filter
+ *
+ * @see KPluginLoader::instantiatePlugins()
+ *
+ * @since 5.1
+ */
+ static QVector<KPluginMetaData> findPlugins(const QString &directory,
+ std::function<bool(const KPluginMetaData &)> filter = std::function<bool(const KPluginMetaData &)>());
+
+ /**
+ * Find all plugins inside @p directory with a given pluginId. Only plugins which have JSON metadata will be considered.
+ *
+ * @param directory The directory to search for plugins. If a relative path is given for @p directory,
+ * all entries of QCoreApplication::libraryPaths() will be checked with @p directory appended as a
+ * subdirectory. If an absolute path is given only that directory will be searched.
+ *
+ * @param pluginId The Id of the plugin, for example KPluginMetaData.pluginId().
+ *
+ * @return all plugins found in @p directory with the given pluginId.
+ *
+ * @see KPluginLoader::instantiatePlugins()
+ *
+ * @since 5.11
+ */
+ static QVector<KPluginMetaData> findPluginsById(const QString &directory, const QString &pluginId);
+
+ /**
+ * Invokes @p callback for each valid plugin found inside @p directory. This is useful if
+ * your application needs to customize the behaviour of KPluginLoader::findPlugins() or
+ * KPluginLoader::instantiatePlugins().
+ *
+ * @note The files found do not necessarily contain JSON metadata and may not be loadable using K/QPluginLoader.
+ * The only guarantee made is that they are valid library file names as determined by QLibrary::isLibrary().
+ *
+ * @param directory The directory to search for plugins. If a relative path is given for @p directory,
+ * all entries of QCoreApplication::libraryPaths() will be checked with @p directory appended as a
+ * subdirectory. If an absolute path is given only that directory will be searched.
+ *
+ * @param callback This function will be invoked for each valid plugin that is found. It will receive
+ * the absolute path to the plugin as an argument
+ *
+ * @see KPluginLoader::findPlugins(), KPluginLoader::instantiatePlugins()
+ *
+ * @since 5.1
+ */
+ static void forEachPlugin(const QString &directory,
+ std::function<void(const QString &)> callback = std::function<void(const QString &)>());
+private:
+ Q_DECLARE_PRIVATE(KPluginLoader)
+ Q_DISABLE_COPY(KPluginLoader)
+
+ KPluginLoaderPrivate *const d_ptr;
+};
+
+/**
+ * Represents the name of a plugin intended for KPluginLoader.
+ *
+ * This exists only so that classes such as KService can provide a cast
+ * operator to allow them to be used as arguments to KPluginLoader.
+ * Unless you are implementing such a cast operator, you should never
+ * need to use this class directly.
+ */
+// NOTE: this class is all inline, as it mainly exists for typing reasons
+// (ie: to prevent the issues that would be caused by adding an
+// operator QString() method to KService)
+class KCOREADDONS_EXPORT KPluginName
+{
+public:
+ /**
+ * Construct a (valid) plugin name from a string.
+ *
+ * If there was an error and the name could not be determined,
+ * fromErrorString() should be used instead to construct an
+ * appropriate error message.
+ *
+ * @param name The name of the plugin; this should not be empty.
+ */
+ inline explicit KPluginName(const QString &name);
+
+ /**
+ * The name of the plugin.
+ *
+ * @returns The string passed to the constructor if isValid() is
+ * @c true, QString() otherwise.
+ */
+ inline QString name() const;
+
+ /**
+ * Whether the name is valid.
+ *
+ * Note that this only determines how the KPluginName was
+ * constructed, not anything about the value of the string.
+ *
+ * @returns @c true if the KPluginName(const QString&) constructor
+ * was used, @c false if fromErrorString() was used.
+ */
+ inline bool isValid() const;
+
+ /**
+ * The error string if no name could be determined.
+ *
+ * @returns The string passed to fromErrorString() if isValid() is
+ * @c false, QString() otherwise.
+ */
+ inline QString errorString() const;
+
+ /**
+ * Construct an invalid plugin name with an error message.
+ *
+ * When this object is passed to KPluginLoader, @p errorString
+ * will be used for KPluginLoader::errorString().
+ *
+ * @param errorString The (translated) error string.
+ */
+ static inline KPluginName fromErrorString(const QString &errorString);
+
+private:
+ inline KPluginName(const QString &name, bool isError);
+
+ QString m_name;
+ bool m_isError;
+};
+
+inline KPluginName::KPluginName(const QString &name)
+ : m_name(name), m_isError(false)
+{}
+inline KPluginName::KPluginName(const QString &name, bool isError)
+ : m_name(name), m_isError(isError)
+{}
+inline QString KPluginName::name() const
+{
+ return m_isError ? QString() : m_name;
+}
+inline bool KPluginName::isValid() const
+{
+ return !m_isError;
+}
+inline QString KPluginName::errorString() const
+{
+ return m_isError ? m_name : QString();
+}
+inline KPluginName KPluginName::fromErrorString(const QString &errorString)
+{
+ return KPluginName(errorString, true);
+}
+
+#endif
--- /dev/null
+/* This file is part of the KDE project
+ Copyright (C) 2014 Alex Richardson <arichardson.kde@gmail.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include "kpluginmetadata.h"
+#include "desktopfileparser_p.h"
+
+#include <QCoreApplication>
+#include <QFileInfo>
+#include <QJsonArray>
+#include <QJsonDocument>
+#include <QLocale>
+#include <QPluginLoader>
+#include <QStringList>
+#include "kcoreaddons_debug.h"
+
+#include "kpluginloader.h"
+#include "kaboutdata.h"
+
+class KPluginMetaDataPrivate : public QSharedData
+{
+public:
+ QString metaDataFileName;
+};
+
+KPluginMetaData::KPluginMetaData()
+{
+}
+
+KPluginMetaData::KPluginMetaData(const KPluginMetaData &other)
+ : m_metaData(other.m_metaData), m_fileName(other.fileName()), d(other.d)
+{
+}
+
+KPluginMetaData &KPluginMetaData::operator=(const KPluginMetaData &other)
+{
+ m_metaData = other.m_metaData;
+ m_fileName = other.m_fileName;
+ d = other.d;
+ return *this;
+}
+
+KPluginMetaData::~KPluginMetaData()
+{
+}
+
+KPluginMetaData::KPluginMetaData(const QString &file)
+{
+ if (file.endsWith(QStringLiteral(".desktop"))) {
+ loadFromDesktopFile(file, QStringList());
+ } else if (file.endsWith(QStringLiteral(".json"))) {
+ d = new KPluginMetaDataPrivate;
+ QFile f(file);
+ bool b = f.open(QIODevice::ReadOnly);
+ if (!b) {
+ qCWarning(KCOREADDONS_DEBUG) << "Couldn't open" << file;
+ return;
+ }
+
+ QJsonParseError error;
+ m_metaData = QJsonDocument::fromJson(f.readAll(), &error).object();
+ if (error.error) {
+ qCWarning(KCOREADDONS_DEBUG) << "error parsing" << file << error.errorString();
+ }
+ m_fileName = file;
+ d->metaDataFileName = file;
+ } else {
+ QPluginLoader loader(file);
+ m_fileName = QFileInfo(loader.fileName()).absoluteFilePath();
+ m_metaData = loader.metaData().value(QStringLiteral("MetaData")).toObject();
+ }
+}
+
+KPluginMetaData::KPluginMetaData(const QPluginLoader &loader)
+{
+ m_fileName = QFileInfo(loader.fileName()).absoluteFilePath();
+ m_metaData = loader.metaData().value(QStringLiteral("MetaData")).toObject();
+}
+
+KPluginMetaData::KPluginMetaData(const KPluginLoader &loader)
+{
+ m_fileName = QFileInfo(loader.fileName()).absoluteFilePath();
+ m_metaData = loader.metaData().value(QStringLiteral("MetaData")).toObject();
+}
+
+KPluginMetaData::KPluginMetaData(const QJsonObject &metaData, const QString &file)
+{
+ m_fileName = file;
+ m_metaData = metaData;
+}
+
+KPluginMetaData::KPluginMetaData(const QJsonObject &metaData, const QString &pluginFile, const QString &metaDataFile)
+{
+ m_fileName = pluginFile;
+ m_metaData = metaData;
+ if (!metaDataFile.isEmpty()) {
+ d = new KPluginMetaDataPrivate;
+ d->metaDataFileName = metaDataFile;
+ }
+}
+
+KPluginMetaData KPluginMetaData::fromDesktopFile(const QString &file, const QStringList &serviceTypes)
+{
+ KPluginMetaData result;
+ result.loadFromDesktopFile(file, serviceTypes);
+ return result;
+}
+
+void KPluginMetaData::loadFromDesktopFile(const QString &file, const QStringList &serviceTypes)
+{
+ QString libraryPath;
+ if (!DesktopFileParser::convert(file, serviceTypes, m_metaData, &libraryPath)) {
+ Q_ASSERT(!isValid());
+ return; // file could not be parsed for some reason, leave this object invalid
+ }
+ d = new KPluginMetaDataPrivate;
+ d->metaDataFileName = QFileInfo(file).absoluteFilePath();
+ if (!libraryPath.isEmpty()) {
+ // this was a plugin with a shared library
+ m_fileName = libraryPath;
+ } else {
+ // no library, make filename point to the .desktop file
+ m_fileName = d->metaDataFileName;
+ }
+}
+
+QJsonObject KPluginMetaData::rawData() const
+{
+ return m_metaData;
+}
+
+QString KPluginMetaData::fileName() const
+{
+ return m_fileName;
+}
+
+QString KPluginMetaData::metaDataFileName() const
+{
+ return d ? d->metaDataFileName : m_fileName;
+}
+
+
+bool KPluginMetaData::isValid() const
+{
+ // it can be valid even if m_fileName is empty (as long as the plugin id is set in the metadata)
+ return !pluginId().isEmpty() && !m_metaData.isEmpty();
+}
+
+bool KPluginMetaData::isHidden() const
+{
+ return rootObject()[QStringLiteral("Hidden")].toBool();
+}
+
+QJsonObject KPluginMetaData::rootObject() const
+{
+ return m_metaData[QStringLiteral("KPlugin")].toObject();
+}
+
+QStringList KPluginMetaData::readStringList(const QJsonObject &obj, const QString &key)
+{
+ const QJsonValue value = obj.value(key);
+ if (value.isUndefined() || value.isObject() || value.isNull()) {
+ return QStringList();
+ } else if (value.isArray()) {
+ return value.toVariant().toStringList();
+ } else {
+ QString asString = value.isString() ? value.toString() : value.toVariant().toString();
+ if (asString.isEmpty()) {
+ return QStringList();
+ }
+ const QString id = obj.value(QStringLiteral("KPlugin")).toObject().value(QStringLiteral("Id")).toString();
+ qCWarning(KCOREADDONS_DEBUG) << "Expected JSON property" << key << "to be a string list."
+ " Treating it as a list with a single entry:" << asString << id.toLatin1().constData();
+ return QStringList(asString);
+ }
+}
+
+QJsonValue KPluginMetaData::readTranslatedValue(const QJsonObject &jo, const QString &key, const QJsonValue &defaultValue)
+{
+ QString languageWithCountry = QLocale().name();
+ auto it = jo.constFind(key + QLatin1Char('[') + languageWithCountry + QLatin1Char(']'));
+ if (it != jo.constEnd()) {
+ return it.value();
+ }
+ const QStringRef language = languageWithCountry.midRef(0, languageWithCountry.indexOf(QLatin1Char('_')));
+ it = jo.constFind(key + QLatin1Char('[') + language + QLatin1Char(']'));
+ if (it != jo.constEnd()) {
+ return it.value();
+ }
+ // no translated value found -> check key
+ it = jo.constFind(key);
+ if (it != jo.constEnd()) {
+ return jo.value(key);
+ }
+ return defaultValue;
+}
+
+QString KPluginMetaData::readTranslatedString(const QJsonObject &jo, const QString &key, const QString &defaultValue)
+{
+ return readTranslatedValue(jo, key, defaultValue).toString(defaultValue);
+}
+
+static inline void addPersonFromJson(const QJsonObject &obj, QList<KAboutPerson>* out) {
+ KAboutPerson person = KAboutPerson::fromJSON(obj);
+ if (person.name().isEmpty()) {
+ qCWarning(KCOREADDONS_DEBUG) << "Invalid plugin metadata: Attempting to create a KAboutPerson from json without 'Name' property:" << obj;
+ return;
+ }
+ out->append(person);
+}
+
+static QList<KAboutPerson> aboutPersonFromJSON(const QJsonValue &people)
+{
+ QList<KAboutPerson> ret;
+ if (people.isObject()) {
+ // single author
+ addPersonFromJson(people.toObject(), &ret);
+ } else if (people.isArray()) {
+ foreach (const QJsonValue &val, people.toArray()) {
+ if (val.isObject()) {
+ addPersonFromJson(val.toObject(), &ret);
+ }
+ }
+ }
+ return ret;
+}
+
+QList<KAboutPerson> KPluginMetaData::authors() const
+{
+ return aboutPersonFromJSON(rootObject()[QStringLiteral("Authors")]);
+}
+
+QList<KAboutPerson> KPluginMetaData::translators() const
+{
+ return aboutPersonFromJSON(rootObject()[QStringLiteral("Translators")]);
+}
+
+QList<KAboutPerson> KPluginMetaData::otherContributors() const
+{
+ return aboutPersonFromJSON(rootObject()[QStringLiteral("OtherContributors")]);
+}
+
+QString KPluginMetaData::category() const
+{
+ return rootObject()[QStringLiteral("Category")].toString();
+}
+
+QString KPluginMetaData::description() const
+{
+ return readTranslatedString(rootObject(), QStringLiteral("Description"));
+}
+
+QString KPluginMetaData::iconName() const
+{
+ return rootObject()[QStringLiteral("Icon")].toString();
+}
+
+QString KPluginMetaData::license() const
+{
+ return rootObject()[QStringLiteral("License")].toString();
+}
+
+QString KPluginMetaData::name() const
+{
+ return readTranslatedString(rootObject(), QStringLiteral("Name"));
+}
+
+QString KPluginMetaData::copyrightText() const
+{
+ return readTranslatedString(rootObject(), QStringLiteral("Copyright"));
+}
+
+QString KPluginMetaData::extraInformation() const
+{
+ return readTranslatedString(rootObject(), QStringLiteral("ExtraInformation"));
+}
+
+QString KPluginMetaData::pluginId() const
+{
+ QJsonObject root = rootObject();
+ auto nameFromMetaData = root.constFind(QStringLiteral("Id"));
+ if (nameFromMetaData != root.constEnd()) {
+ const QString id = nameFromMetaData.value().toString();
+ if (!id.isEmpty()) {
+ return id;
+ }
+ }
+ // passing QFileInfo an empty string gives the CWD, which is not what we want
+ if (m_fileName.isEmpty()) {
+ return QString();
+ }
+ return QFileInfo(m_fileName).baseName();
+}
+
+QString KPluginMetaData::version() const
+{
+ return rootObject()[QStringLiteral("Version")].toString();
+}
+
+QString KPluginMetaData::website() const
+{
+ return rootObject()[QStringLiteral("Website")].toString();
+}
+
+QStringList KPluginMetaData::dependencies() const
+{
+ return readStringList(rootObject(), QStringLiteral("Dependencies"));
+}
+
+QStringList KPluginMetaData::serviceTypes() const
+{
+ return readStringList(rootObject(), QStringLiteral("ServiceTypes"));
+}
+
+QStringList KPluginMetaData::mimeTypes() const
+{
+ return readStringList(rootObject(), QStringLiteral("MimeTypes"));
+}
+
+QStringList KPluginMetaData::formFactors() const
+{
+ return readStringList(rootObject(), QStringLiteral("FormFactors"));
+}
+
+bool KPluginMetaData::isEnabledByDefault() const
+{
+ QJsonValue val = rootObject()[QStringLiteral("EnabledByDefault")];
+ if (val.isBool()) {
+ return val.toBool();
+ } else if (val.isString()) {
+ return val.toString() == QLatin1String("true");
+ }
+ return false;
+}
+
+QString KPluginMetaData::value(const QString &key, const QString &defaultValue) const
+{
+ const QJsonValue value = m_metaData.value(key);
+ if (value.isString()) {
+ return value.toString(defaultValue);
+ } else if (value.isArray()) {
+ qCWarning(KCOREADDONS_DEBUG) << "Expected JSON property" << key << "to be a single string."
+ " but it is a stringlist";
+ const QStringList list = value.toVariant().toStringList();
+ if (list.isEmpty()) {
+ return defaultValue;
+ }
+ return list.join(QChar::fromLatin1(','));
+ } else if (value.isBool()) {
+ qCWarning(KCOREADDONS_DEBUG) << "Expected JSON property" << key << "to be a single string."
+ " but it is a bool";
+ return value.toBool() ? QStringLiteral("true") : QStringLiteral("false");
+ }
+ return defaultValue;
+}
+
+bool KPluginMetaData::operator==(const KPluginMetaData &other) const
+{
+ return m_fileName == other.m_fileName && m_metaData == other.m_metaData;
+}
+
+QObject* KPluginMetaData::instantiate() const
+{
+ return QPluginLoader(m_fileName).instance();
+}
+
--- /dev/null
+/* This file is part of the KDE project
+ Copyright (C) 2014 Alex Richardson <arichardson.kde@gmail.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef KPLUGINMETADATA_H
+#define KPLUGINMETADATA_H
+
+#include "kcoreaddons_export.h"
+
+#include <QExplicitlySharedDataPointer>
+#include <QJsonObject>
+#include <QString>
+#include <QStringList>
+#include <QVector>
+
+#include <functional>
+
+class KPluginLoader;
+class QPluginLoader;
+class QStringList;
+class KPluginMetaDataPrivate;
+class KAboutPerson;
+class QObject;
+
+
+/**
+ * @class KPluginMetaData kpluginmetadata.h KPluginMetaData
+ *
+ * This class allows easily accessing some standardized values from the JSON metadata that
+ * can be embedded into Qt plugins. Additional plugin-specific metadata can be retrieved by
+ * directly reading from the QJsonObject returned by KPluginMetaData::rawData().
+ *
+ * This class can be used instead of KPluginInfo from KService for applications that only load
+ * Qt C++ plugins.
+ *
+ * The following keys will be read from an object "KPlugin" inside the metadata JSON:
+ *
+ * Key | Accessor function | JSON Type
+ * -------------------| -------------------- | ---------------------
+ * Name | name() | string
+ * Description | description() | string
+ * ExtraInformation | extraInformation() | string
+ * Icon | iconName() | string
+ * Authors | authors() | object array (KAboutPerson)
+ * Category | category() | string
+ * License | license() | string
+ * Copyright | copyrightText() | string
+ * Id | pluginId() | string
+ * Version | version() | string
+ * Website | website() | string
+ * EnabledByDefault | isEnabledByDefault() | bool
+ * ServiceTypes | serviceTypes() | string array
+ * MimeTypes | mimeTypes() | string array
+ * FormFactors | formFactors() | string array
+ * Translators | translators() | object array (KAboutPerson)
+ * OtherContributors | otherContributors() | object array (KAboutPerson)
+ *
+ * The Authors, Translators and OtherContributors keys are expected to be
+ * list of objects that match the structure expected by KAboutPerson::fromJSON().
+ *
+ * An example metadata json file could look like this:
+ * @verbatim
+ {
+ "KPlugin": {
+ "Name": "Date and Time",
+ "Description": "Date and time by timezone",
+ "Icon": "preferences-system-time",
+ "Authors": { "Name": "Aaron Seigo", "Email": "aseigo@kde.org" },
+ "Category": "Date and Time",
+ "Dependencies": [],
+ "EnabledByDefault": "true",
+ "License": "LGPL",
+ "Id": "time",
+ "Version": "1.0",
+ "Website": "https://plasma.kde.org/",
+ "ServiceTypes": ["Plasma/DataEngine"]
+ }
+ }
+ @endverbatim
+ *
+ * @sa KAboutPerson::fromJSON()
+ * @since 5.1
+ */
+class KCOREADDONS_EXPORT KPluginMetaData
+{
+public:
+
+ /** Creates an invalid KPluginMetaData instance */
+ KPluginMetaData();
+
+ /**
+ * Reads the plugin metadata from a KPluginLoader instance. You must call KPluginLoader::setFileName()
+ * or use the appropriate constructor on @p loader before calling this.
+ */
+ KPluginMetaData(const KPluginLoader &loader);
+
+ /**
+ * Reads the plugin metadata from a QPluginLoader instance. You must call QPluginLoader::setFileName()
+ * or use the appropriate constructor on @p loader before calling this.
+ */
+ KPluginMetaData(const QPluginLoader &loader);
+
+ /**
+ * Reads the plugin metadata from a plugin or .desktop which can be loaded from @p file.
+ *
+ * For plugins, platform-specific library suffixes may be omitted since @p file will be resolved
+ * using the same logic as QPluginLoader.
+ *
+ * If the file name ends with ".desktop", the .desktop file will be parsed instead of
+ * reading the metadata from the QPluginLoader. This is the same as calling
+ * KPluginMetaData::fromDesktopFile() without the serviceTypes parameter.
+ *
+ * If @p file ends with .json, the file will be loaded as the QJsonObject metadata.
+ *
+ * @see QPluginLoader::setFileName()
+ * @see KPluginMetaData::fromDesktopFile()
+ */
+ KPluginMetaData(const QString &file);
+
+ /**
+ * Creates a KPluginMetaData from a QJsonObject holding the metadata and a file name
+ * This can be used if the data is not retrieved from a Qt C++ plugin library but from some
+ * other source.
+ * @see KPluginMetaData(const QJsonObject &, const QString &, const QString &)
+ */
+ KPluginMetaData(const QJsonObject &metaData, const QString &file);
+
+ // TODO: KF6: merge with the above and make metaDataFile default to QString()
+ /**
+ * Creates a KPluginMetaData
+ * @param metaData the JSON metadata to use for this object
+ * @param pluginFile the file that the plugin can be loaded from
+ * @param metaDataFile the file that the JSON metadata was read from
+ *
+ * This can be used if the data is not retrieved from a Qt C++ plugin library but from some
+ * other source.
+ *
+ * @since 5.5
+ */
+ KPluginMetaData(const QJsonObject &metaData, const QString &pluginFile, const QString &metaDataFile);
+
+ /**
+ * Copy contructor
+ */
+ KPluginMetaData(const KPluginMetaData &);
+ /**
+ * Copy assignment
+ */
+ KPluginMetaData &operator=(const KPluginMetaData &);
+ /**
+ * Destructor
+ */
+ ~KPluginMetaData();
+
+ /**
+ * Load a KPluginMetaData instace from a .desktop file. Unlike the constructor which takes
+ * a single file parameter this method allows you to specify which service type files should
+ * be parsed to determine the correct type for a given .desktop property.
+ * This ensures that a e.g. comma-separated string list field in the .desktop file will correctly
+ * be converted to a JSON string array.
+ *
+ * @note This function mostly exists for backwards-compatibility. It is recommended
+ * that new applications load JSON files directly instead of using .desktop files for plugin metadata.
+ *
+ * @param file the .desktop file to load
+ * @param serviceTypes a list of files to parse If one of these paths is a relative path it
+ * will be resolved relative to the "kservicetypes5" subdirectory in QStandardPaths::GenericDataLocation.
+ * If the list is empty only the default set of properties will be treated specially and all other entries
+ * will be read as the JSON string type.
+ *
+ * @since 5.16
+ */
+ static KPluginMetaData fromDesktopFile(const QString &file, const QStringList &serviceTypes = QStringList());
+
+ /**
+ * @return whether this object holds valid information about a plugin.
+ * If this is @c true pluginId() will return a non-empty string.
+ */
+ bool isValid() const;
+
+ /**
+ * @return whether this object should be hidden, this is usually not used for binary
+ * plugins, when loading a KPluginMetaData from a .desktop file, this will reflect
+ * the value of the "Hidden" key.
+ *
+ * @since 5.8
+ */
+ bool isHidden() const;
+
+ /**
+ * @return the path to the plugin. This string can be passed to the KPluginLoader
+ * or QPluginLoader constructors in order to attempt to load this plugin.
+ * @note It is not guaranteed that this is a valid path to a shared library (i.e. loadable
+ * by QPluginLoader) since the metadata could also refer to a non-C++ plugin.
+ */
+ QString fileName() const;
+
+ /**
+ * @return the file that the metadata was read from. This is not necessarily the same as
+ * fileName(), since not all plugins have the metadata embedded. The metadata could also be
+ * stored in a separate .desktop file.
+ *
+ * @since 5.5
+ */
+ QString metaDataFileName() const;
+
+ /**
+ * @return the full metadata stored inside the plugin file.
+ */
+ QJsonObject rawData() const;
+
+
+ /**
+ * Tries to instantiate this plugin using KPluginMetaData::fileName().
+ * @note The value of KPluginMetaData::dependencies() is not used here, dependencies must be
+ * resolved manually.
+ *
+ * @return The plugin root object or @c nullptr if it could not be loaded
+ * @see QPluginLoader::instance(), KPluginLoader::instance()
+ */
+ QObject *instantiate() const;
+
+ /**
+ * @return the user visible name of the plugin.
+ */
+ QString name() const;
+
+ /**
+ * @return a short description of the plugin.
+ */
+ QString description() const;
+
+ /**
+ * @return additional information about this plugin (e.g. for use in an "about plugin" dialog)
+ *
+ * @since 5.18
+ */
+ QString extraInformation() const;
+
+ /**
+ * @return the author(s) of this plugin.
+ */
+ QList<KAboutPerson> authors() const;
+
+ /**
+ * @return the translator(s) of this plugin.
+ *
+ * @since 5.18
+ */
+ QList<KAboutPerson> translators() const;
+
+ /**
+ * @return a list of people that contributed to this plugin (other than the authors and translators).
+ *
+ * @since 5.18
+ */
+ QList<KAboutPerson> otherContributors() const;
+
+ /**
+ * @return the categories of this plugin (e.g. "playlist/skin").
+ */
+ QString category() const;
+
+ /**
+ * @return the icon name for this plugin
+ * @see QIcon::fromTheme()
+ */
+ QString iconName() const;
+
+ /**
+ * @return the short license identifier (e.g. LGPL).
+ * @see KAboutLicense::byKeyword() for retrieving the full license information
+ */
+ QString license() const;
+
+ /**
+ * @return a short copyright statement
+ *
+ * @since 5.18
+ */
+ QString copyrightText() const;
+
+ /**
+ * @return the internal name of the plugin (for KParts Plugins this is
+ * the same name as set in the .rc file). If the plugin name property is not set in
+ * the metadata this will return the plugin file name without the file extension.
+ */
+ QString pluginId() const;
+
+ /**
+ * @return the version of the plugin.
+ */
+ QString version() const;
+
+ /**
+ * @return the website of the plugin.
+ */
+ QString website() const;
+
+ /**
+ * @return a list of plugins that this plugin depends on so that it can function properly
+ * @see KJsonPluginInfo::pluginId()
+ */
+ QStringList dependencies() const;
+
+ /**
+ * @note Unlike KService this does not contain the MIME types. To get the handled MIME types
+ * use the KPluginMetaData::mimeTypes() function.
+ * @return a list of service types this plugin implements (e.g. "Plasma/DataEngine")
+ */
+ QStringList serviceTypes() const;
+
+ /**
+ * @return a list of MIME types this plugin can handle (e.g. "application/pdf", "image/png", etc.)
+ * @since 5.16
+ */
+ QStringList mimeTypes() const;
+
+ /**
+ * @return A string list of formfactors this plugin is useful for, e.g. desktop, tablet,
+ * handset, mediacenter, etc.
+ * The keys for this are not formally defined.
+ *
+ * @since 5.12
+ */
+ QStringList formFactors() const;
+
+ /**
+ * @return whether the plugin should be enabled by default.
+ * This is only a recommendation, applications can ignore this value if they want to.
+ */
+ bool isEnabledByDefault() const;
+
+ /**
+ * @return the value for @p key from the metadata or @p defaultValue if the key does not exist
+ * or the value for @p key is not of type string
+ *
+ * @see KPluginMetaData::rawData() if QString is not the correct type for @p key
+ */
+ QString value(const QString &key, const QString &defaultValue = QString()) const;
+
+ /** @return the value for @p key inside @p jo as a string list. If the type of @p key is string, a list with containing
+ * just that string will be returned, if it is an array the list will contain one entry for each array member.
+ * If the key cannot be found an empty list will be returned.
+ */
+ static QStringList readStringList(const QJsonObject &jo, const QString &key);
+
+ /**
+ * Reads a value from @p jo but unlike QJsonObject::value() it allows different entries for each locale
+ * This is done by appending the locale identifier in brackets to the key (e.g. "[de_DE]" or "[es]")
+ * When looking for a key "foo" with German (Germany) locale we will first attempt to read "foo[de_DE]",
+ * if that does not exist "foo[de]", finally falling back to "foo" if that also doesn't exist.
+ * @return the translated value for @p key from @p jo or @p defaultValue if @p key was not found
+ */
+ static QJsonValue readTranslatedValue(const QJsonObject &jo, const QString &key, const QJsonValue &defaultValue = QJsonValue());
+
+ /**
+ * @return the translated value of @p key from @p jo as a string or @p defaultValue if @p key was not found
+ * or the value for @p key is not of type string
+ * @see KPluginMetaData::readTranslatedValue(const QJsonObject &jo, const QString &key)
+ */
+ static QString readTranslatedString(const QJsonObject &jo, const QString &key, const QString &defaultValue = QString());
+
+ /**
+ * @return @c true if this object is equal to @p other, otherwise @c false
+ */
+ bool operator==(const KPluginMetaData &other) const;
+
+ /**
+ * @return @c true if this object is not equal to @p other, otherwise @c false.
+ */
+ inline bool operator!=(const KPluginMetaData &other) const
+ {
+ return !(*this == other);
+ }
+private:
+ QJsonObject rootObject() const;
+ void loadFromDesktopFile(const QString &file, const QStringList &serviceTypes);
+private:
+ QJsonObject m_metaData;
+ QString m_fileName;
+ QExplicitlySharedDataPointer<KPluginMetaDataPrivate> d; // for future binary compatible extensions
+};
+
+inline uint qHash(const KPluginMetaData &md, uint seed)
+{
+ return qHash(md.pluginId(), seed);
+}
+
+#endif // KPLUGINMETADATA_H
--- /dev/null
+/* This file is part of the KDE libraries
+ Copyright (c) 1999 Matthias Kalle Dalheimer <kalle@kde.org>
+ Copyright (c) 2000 Charles Samuels <charles@kde.org>
+ Copyright (c) 2005 Joseph Wenninger <kde@jowenn.at>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+ */
+
+#include "krandom.h"
+
+#include <stdlib.h>
+#ifdef Q_OS_WIN
+#include <process.h>
+#else // Q_OS_WIN
+#include <unistd.h>
+#endif // Q_OS_WIN
+#include <stdio.h>
+#include <time.h>
+#ifndef Q_OS_WIN
+#include <sys/time.h>
+#endif // Q_OS_WIN
+#include <fcntl.h>
+
+#include <QFile>
+#include <QThread>
+#include <QThreadStorage>
+
+int KRandom::random()
+{
+ static QThreadStorage<bool> initialized_threads;
+ if (!initialized_threads.localData()) {
+ unsigned int seed;
+ initialized_threads.setLocalData(true);
+ QFile urandom(QStringLiteral("/dev/urandom"));
+ bool opened = urandom.open(QIODevice::ReadOnly | QIODevice::Unbuffered);
+ if (!opened || urandom.read(reinterpret_cast<char *>(&seed), sizeof(seed)) != sizeof(seed)) {
+ // No /dev/urandom... try something else.
+ qsrand(getpid());
+ seed = qrand() ^ time(nullptr) ^ reinterpret_cast<quintptr>(QThread::currentThread());
+ }
+ qsrand(seed);
+ }
+ return qrand();
+}
+
+QString KRandom::randomString(int length)
+{
+ if (length <= 0) {
+ return QString();
+ }
+
+ QString str; str.resize(length);
+ int i = 0;
+ while (length--) {
+ int r = random() % 62;
+ r += 48;
+ if (r > 57) {
+ r += 7;
+ }
+ if (r > 90) {
+ r += 6;
+ }
+ str[i++] = char(r);
+ // so what if I work backwards?
+ }
+ return str;
+}
--- /dev/null
+/* This file is part of the KDE libraries
+ Copyright (c) 1999 Matthias Kalle Dalheimer <kalle@kde.org>
+ Copyright (c) 2000 Charles Samuels <charles@kde.org>
+ Copyright (c) 2005 Joseph Wenninger <kde@jowenn.at>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef KRANDOM_H
+#define KRANDOM_H
+
+#include <kcoreaddons_export.h>
+
+#include <QString>
+
+/**
+ * \headerfile krandom.h <KRandom>
+ *
+ * @short Helper class to create random data
+ *
+ * This namespace provides methods which generate random data.
+ * KRandom is not recommended for serious random-number generation needs,
+ * like cryptography.
+ */
+namespace KRandom
+{
+/**
+ * Generates a uniform random number.
+ * @return A random number in the range [0, RAND_MAX). The RNG is seeded
+ * on first use.
+ */
+KCOREADDONS_EXPORT int random();
+
+/**
+ * Generates a random string. It operates in the range [A-Za-z0-9]
+ * @param length Generate a string of this length.
+ * @return the random string
+ */
+KCOREADDONS_EXPORT QString randomString(int length);
+}
+
+#endif
+
--- /dev/null
+/*
+ This file is part of the KDE libraries
+ Copyright (c) 1999 Sean Harmer <sh@astro.keele.ac.uk>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include "krandomsequence.h"
+#include "krandom.h"
+
+class Q_DECL_HIDDEN KRandomSequence::Private
+{
+public:
+ enum {SHUFFLE_TABLE_SIZE = 32};
+
+ void draw(); // Generate the random number
+
+ int lngSeed1;
+ int lngSeed2;
+ int lngShufflePos;
+ int shuffleArray[SHUFFLE_TABLE_SIZE];
+};
+
+//////////////////////////////////////////////////////////////////////////////
+// Construction / Destruction
+//////////////////////////////////////////////////////////////////////////////
+
+KRandomSequence::KRandomSequence(long lngSeed1) : d(new Private)
+{
+ // Seed the generator
+ setSeed(lngSeed1);
+}
+
+KRandomSequence::KRandomSequence(int lngSeed1) : d(new Private)
+{
+ // Seed the generator
+ setSeed(lngSeed1);
+}
+
+KRandomSequence::~KRandomSequence()
+{
+ delete d;
+}
+
+KRandomSequence::KRandomSequence(const KRandomSequence &a) : d(new Private)
+{
+ *d = *a.d;
+}
+
+KRandomSequence &KRandomSequence::operator=(const KRandomSequence &a)
+{
+ if (this != &a) {
+ *d = *a.d;
+ }
+ return *this;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// Member Functions
+//////////////////////////////////////////////////////////////////////////////
+void KRandomSequence::setSeed(long lngSeed1)
+{
+ setSeed(static_cast<int>(lngSeed1));
+}
+
+void KRandomSequence::setSeed(int lngSeed1)
+{
+ // Convert the positive seed number to a negative one so that the draw()
+ // function can initialise itself the first time it is called. We just have
+ // to make sure that the seed used != 0 as zero perpetuates itself in a
+ // sequence of random numbers.
+ if (lngSeed1 < 0) {
+ d->lngSeed1 = -1;
+ } else if (lngSeed1 == 0) {
+ d->lngSeed1 = -((KRandom::random() & ~1) + 1);
+ } else {
+ d->lngSeed1 = -lngSeed1;
+ }
+}
+
+static const int sMod1 = 2147483563;
+static const int sMod2 = 2147483399;
+
+void KRandomSequence::Private::draw()
+{
+ static const int sMM1 = sMod1 - 1;
+ static const int sA1 = 40014;
+ static const int sA2 = 40692;
+ static const int sQ1 = 53668;
+ static const int sQ2 = 52774;
+ static const int sR1 = 12211;
+ static const int sR2 = 3791;
+ static const int sDiv = 1 + sMM1 / SHUFFLE_TABLE_SIZE;
+
+ // Long period (>2 * 10^18) random number generator of L'Ecuyer with
+ // Bayes-Durham shuffle and added safeguards. Returns a uniform random
+ // deviate between 0.0 and 1.0 (exclusive of the endpoint values). Call
+ // with a negative number to initialize; thereafter, do not alter idum
+ // between successive deviates in a sequence. RNMX should approximate
+ // the largest floating point value that is less than 1.
+
+ int j; // Index for the shuffle table
+ int k;
+
+ // Initialise
+ if (lngSeed1 <= 0) {
+ lngSeed2 = lngSeed1;
+
+ // Load the shuffle table after 8 warm-ups
+ for (j = SHUFFLE_TABLE_SIZE + 7; j >= 0; --j) {
+ k = lngSeed1 / sQ1;
+ lngSeed1 = sA1 * (lngSeed1 - k * sQ1) - k * sR1;
+ if (lngSeed1 < 0) {
+ lngSeed1 += sMod1;
+ }
+
+ if (j < SHUFFLE_TABLE_SIZE) {
+ shuffleArray[j] = lngSeed1;
+ }
+ }
+
+ lngShufflePos = shuffleArray[0];
+ }
+
+ // Start here when not initializing
+
+ // Compute lngSeed1 = ( lngIA1*lngSeed1 ) % lngIM1 without overflows
+ // by Schrage's method
+ k = lngSeed1 / sQ1;
+ lngSeed1 = sA1 * (lngSeed1 - k * sQ1) - k * sR1;
+ if (lngSeed1 < 0) {
+ lngSeed1 += sMod1;
+ }
+
+ // Compute lngSeed2 = ( lngIA2*lngSeed2 ) % lngIM2 without overflows
+ // by Schrage's method
+ k = lngSeed2 / sQ2;
+ lngSeed2 = sA2 * (lngSeed2 - k * sQ2) - k * sR2;
+ if (lngSeed2 < 0) {
+ lngSeed2 += sMod2;
+ }
+
+ j = lngShufflePos / sDiv;
+ lngShufflePos = shuffleArray[j] - lngSeed2;
+ shuffleArray[j] = lngSeed1;
+
+ if (lngShufflePos < 1) {
+ lngShufflePos += sMM1;
+ }
+}
+
+void
+KRandomSequence::modulate(int i)
+{
+ d->lngSeed2 -= i;
+ if (d->lngSeed2 < 0) {
+ d->lngShufflePos += sMod2;
+ }
+ d->draw();
+ d->lngSeed1 -= i;
+ if (d->lngSeed1 < 0) {
+ d->lngSeed1 += sMod1;
+ }
+ d->draw();
+}
+
+double
+KRandomSequence::getDouble()
+{
+ static const double finalAmp = 1.0 / double(sMod1);
+ static const double epsilon = 1.2E-7;
+ static const double maxRand = 1.0 - epsilon;
+ double temp;
+ d->draw();
+ // Return a value that is not one of the endpoints
+ if ((temp = finalAmp * d->lngShufflePos) > maxRand) {
+ // We don't want to return 1.0
+ return maxRand;
+ } else {
+ return temp;
+ }
+}
+
+unsigned long
+KRandomSequence::getLong(unsigned long max)
+{
+ return getInt(static_cast<int>(max));
+}
+
+unsigned int
+KRandomSequence::getInt(unsigned int max)
+{
+ d->draw();
+
+ return max ? ((static_cast<unsigned int>(d->lngShufflePos)) % max) : 0;
+}
+
+bool
+KRandomSequence::getBool()
+{
+ d->draw();
+
+ return ((static_cast<unsigned int>(d->lngShufflePos)) & 1);
+}
--- /dev/null
+/* This file is part of the KDE libraries
+ Copyright (c) 1999 Sean Harmer <sh@astro.keele.ac.uk>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+#ifndef K_RANDOM_SEQUENCE_H
+#define K_RANDOM_SEQUENCE_H
+
+#include <kcoreaddons_export.h>
+#include <QList>
+
+/**
+ * \class KRandomSequence krandomsequence.h <KRandomSequence>
+ *
+ * A class to create a pseudo-random sequence
+ *
+ * Given a seed number, this class will produce a sequence of
+ * pseudo-random numbers. This would typically be used in
+ * applications like games.
+ *
+ * In general, you should instantiate a KRandomSequence object and
+ * pass along your seed number in the constructor. From then on,
+ * simply call getDouble or getLong to obtain the next
+ * number in the sequence.
+ *
+ * @author Sean Harmer <sh@astro.keele.ac.uk>
+ */
+class KCOREADDONS_EXPORT KRandomSequence
+{
+public:
+ /**
+ * Creates a pseudo-random sequence based on the seed lngSeed.
+ *
+ * A Pseudo-random sequence is different for each seed but can be
+ * reproduced by starting the sequence with the same seed.
+ *
+ * If you need a single value which needs to be unpredictable,
+ * you need to use KRandom::random() instead.
+ *
+ * @param intSeed Seed to initialize the sequence with.
+ * If lngSeed is 0, the sequence is initialized with a value from
+ * KRandom::random().
+ *
+ * Do not use methods working with long type because on 64-bit
+ * their size is different.
+ */
+ explicit KRandomSequence(int intSeed = 0);
+ explicit KRandomSequence(long lngSeed);
+
+ /**
+ * Standard destructor
+ */
+ virtual ~KRandomSequence();
+
+ /**
+ * Copy constructor
+ */
+ KRandomSequence(const KRandomSequence &a);
+
+ /**
+ * Assignment
+ */
+ KRandomSequence &operator=(const KRandomSequence &a);
+
+ /**
+ * Restart the sequence based on lngSeed.
+ * @param intSeed Seed to initialize the sequence with.
+ * If lngSeed is 0, the sequence is initialized with a value from
+ * KRandom::random().
+ */
+ void setSeed(int intSeed = 0);
+ void setSeed(long lngSeed = 0);
+
+ /**
+ * Get the next number from the pseudo-random sequence.
+ *
+ * @return a pseudo-random double value between [0,1)
+ */
+ double getDouble();
+
+ /**
+ * Get the next number from the pseudo-random sequence.
+ *
+ * @return a pseudo-random integer value between [0, max)
+ * with 0 <= max < 1.000.000
+ */
+ unsigned int getInt(unsigned int max);
+ unsigned long getLong(unsigned long max);
+
+ /**
+ * Get a boolean from the pseudo-random sequence.
+ *
+ * @return a boolean which is either true or false
+ */
+ bool getBool();
+
+ /**
+ * Put a list in random order.
+ *
+ * Since kdelibs 4.11, this function uses a more efficient
+ * algorithm (Fisher-Yates). Therefore, the order of the items in
+ * the randomized list is different from the one in earlier
+ * versions if the same seed value is used for the random
+ * sequence.
+ *
+ * @param list the list whose order will be modified
+ * @note modifies the list in place
+ */
+ template<typename T> void randomize(QList<T> &list)
+ {
+ // Fisher-Yates algorithm
+ for (int index = list.count() - 1; index > 0; --index) {
+ const int swapIndex = getInt(index + 1);
+ qSwap(list[index], list[swapIndex]);
+ }
+ }
+
+ /**
+ * Modulate the random sequence.
+ *
+ * If S(i) is the sequence of numbers that will follow
+ * given the current state after calling modulate(i),
+ * then S(i) != S(j) for i != j and
+ * S(i) == S(j) for i == j.
+ *
+ * This can be useful in game situation where "undo" restores
+ * the state of the random sequence. If the game modulates the
+ * random sequence with the move chosen by the player, the
+ * random sequence will be identical whenever the player "redo"-s
+ * his or hers original move, but different when the player
+ * chooses another move.
+ *
+ * With this scenario "undo" can no longer be used to repeat a
+ * certain move over and over again until the computer reacts
+ * with a favorable response or to predict the response for a
+ * certain move based on the response to another move.
+ * @param i the sequence identified
+ */
+ void modulate(int i);
+
+private:
+ class Private;
+ Private *const d;
+};
+
+#endif
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ Copyright (c) 2002-2003 Oswald Buddenhagen <ossi@kde.org>
+ Copyright (c) 2003 Waldo Bastian <bastian@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include "kmacroexpander_p.h"
+
+#include <QHash>
+#include <QStringList>
+
+KMacroExpanderBase::KMacroExpanderBase(QChar c) : d(new KMacroExpanderBasePrivate(c))
+{
+}
+
+KMacroExpanderBase::~KMacroExpanderBase()
+{
+ delete d;
+}
+
+void KMacroExpanderBase::setEscapeChar(QChar c)
+{
+ d->escapechar = c;
+}
+
+QChar KMacroExpanderBase::escapeChar() const
+{
+ return d->escapechar;
+}
+
+void KMacroExpanderBase::expandMacros(QString &str)
+{
+ int pos;
+ int len;
+ ushort ec = d->escapechar.unicode();
+ QStringList rst;
+ QString rsts;
+
+ for (pos = 0; pos < str.length();) {
+ if (ec != 0) {
+ if (str.unicode()[pos].unicode() != ec) {
+ goto nohit;
+ }
+ if (!(len = expandEscapedMacro(str, pos, rst))) {
+ goto nohit;
+ }
+ } else {
+ if (!(len = expandPlainMacro(str, pos, rst))) {
+ goto nohit;
+ }
+ }
+ if (len < 0) {
+ pos -= len;
+ continue;
+ }
+ rsts = rst.join(QLatin1Char(' '));
+ rst.clear();
+ str.replace(pos, len, rsts);
+ pos += rsts.length();
+ continue;
+ nohit:
+ pos++;
+ }
+}
+
+bool KMacroExpanderBase::expandMacrosShellQuote(QString &str)
+{
+ int pos = 0;
+ return expandMacrosShellQuote(str, pos) && pos == str.length();
+}
+
+int KMacroExpanderBase::expandPlainMacro(const QString &, int, QStringList &)
+{
+ qFatal("KMacroExpanderBase::expandPlainMacro called!");
+ return 0;
+}
+
+int KMacroExpanderBase::expandEscapedMacro(const QString &, int, QStringList &)
+{
+ qFatal("KMacroExpanderBase::expandEscapedMacro called!");
+ return 0;
+}
+
+//////////////////////////////////////////////////
+
+template <typename KT, typename VT>
+class KMacroMapExpander : public KMacroExpanderBase
+{
+
+public:
+ KMacroMapExpander(const QHash<KT, VT> &map, QChar c = QLatin1Char('%')) :
+ KMacroExpanderBase(c), macromap(map) {}
+
+protected:
+ int expandPlainMacro(const QString &str, int pos, QStringList &ret) override;
+ int expandEscapedMacro(const QString &str, int pos, QStringList &ret) override;
+
+private:
+ QHash<KT, VT> macromap;
+};
+
+static QStringList &operator+=(QStringList &s, const QString &n)
+{
+ s << n;
+ return s;
+}
+
+////////
+
+static bool
+isIdentifier(ushort c)
+{
+ return c == '_' ||
+ (c >= 'A' && c <= 'Z') ||
+ (c >= 'a' && c <= 'z') ||
+ (c >= '0' && c <= '9');
+}
+
+////////
+
+template <typename VT>
+class KMacroMapExpander<QChar, VT> : public KMacroExpanderBase
+{
+
+public:
+ KMacroMapExpander(const QHash<QChar, VT> &map, QChar c = QLatin1Char('%')) :
+ KMacroExpanderBase(c), macromap(map) {}
+
+protected:
+ int expandPlainMacro(const QString &str, int pos, QStringList &ret) override;
+ int expandEscapedMacro(const QString &str, int pos, QStringList &ret) override;
+
+private:
+ QHash<QChar, VT> macromap;
+};
+
+template <typename VT>
+int
+KMacroMapExpander<QChar, VT>::expandPlainMacro(const QString &str, int pos, QStringList &ret)
+{
+ typename QHash<QChar, VT>::const_iterator it = macromap.constFind(str.unicode()[pos]);
+ if (it != macromap.constEnd()) {
+ ret += it.value();
+ return 1;
+ }
+ return 0;
+}
+
+template <typename VT>
+int
+KMacroMapExpander<QChar, VT>::expandEscapedMacro(const QString &str, int pos, QStringList &ret)
+{
+ if (str.length() <= pos + 1) {
+ return 0;
+ }
+
+ if (str.unicode()[pos + 1] == escapeChar()) {
+ ret += QString(escapeChar());
+ return 2;
+ }
+ typename QHash<QChar, VT>::const_iterator it = macromap.constFind(str.unicode()[pos + 1]);
+ if (it != macromap.constEnd()) {
+ ret += it.value();
+ return 2;
+ }
+
+ return 0;
+}
+
+template <typename VT>
+class KMacroMapExpander<QString, VT> : public KMacroExpanderBase
+{
+
+public:
+ KMacroMapExpander(const QHash<QString, VT> &map, QChar c = QLatin1Char('%')) :
+ KMacroExpanderBase(c), macromap(map) {}
+
+protected:
+ int expandPlainMacro(const QString &str, int pos, QStringList &ret) override;
+ int expandEscapedMacro(const QString &str, int pos, QStringList &ret) override;
+
+private:
+ QHash<QString, VT> macromap;
+};
+
+template <typename VT>
+int
+KMacroMapExpander<QString, VT>::expandPlainMacro(const QString &str, int pos, QStringList &ret)
+{
+ if (pos && isIdentifier(str.unicode()[pos - 1].unicode())) {
+ return 0;
+ }
+ int sl;
+ for (sl = 0; isIdentifier(str.unicode()[pos + sl].unicode()); sl++)
+ ;
+ if (!sl) {
+ return 0;
+ }
+ typename QHash<QString, VT>::const_iterator it =
+ macromap.constFind(str.mid(pos, sl));
+ if (it != macromap.constEnd()) {
+ ret += it.value();
+ return sl;
+ }
+ return 0;
+}
+
+template <typename VT>
+int
+KMacroMapExpander<QString, VT>::expandEscapedMacro(const QString &str, int pos, QStringList &ret)
+{
+ if (str.length() <= pos + 1) {
+ return 0;
+ }
+
+ if (str.unicode()[pos + 1] == escapeChar()) {
+ ret += QString(escapeChar());
+ return 2;
+ }
+ int sl, rsl, rpos;
+ if (str.unicode()[pos + 1].unicode() == '{') {
+ rpos = pos + 2;
+ if ((sl = str.indexOf(QLatin1Char('}'), rpos)) < 0) {
+ return 0;
+ }
+ sl -= rpos;
+ rsl = sl + 3;
+ } else {
+ rpos = pos + 1;
+ for (sl = 0; isIdentifier(str.unicode()[rpos + sl].unicode()); ++sl)
+ ;
+ rsl = sl + 1;
+ }
+ if (!sl) {
+ return 0;
+ }
+ typename QHash<QString, VT>::const_iterator it =
+ macromap.constFind(str.mid(rpos, sl));
+ if (it != macromap.constEnd()) {
+ ret += it.value();
+ return rsl;
+ }
+ return 0;
+}
+
+////////////
+
+int
+KCharMacroExpander::expandPlainMacro(const QString &str, int pos, QStringList &ret)
+{
+ if (expandMacro(str.unicode()[pos], ret)) {
+ return 1;
+ }
+ return 0;
+}
+
+int
+KCharMacroExpander::expandEscapedMacro(const QString &str, int pos, QStringList &ret)
+{
+ if (str.length() <= pos + 1) {
+ return 0;
+ }
+
+ if (str.unicode()[pos + 1] == escapeChar()) {
+ ret += QString(escapeChar());
+ return 2;
+ }
+ if (expandMacro(str.unicode()[pos + 1], ret)) {
+ return 2;
+ }
+ return 0;
+}
+
+int
+KWordMacroExpander::expandPlainMacro(const QString &str, int pos, QStringList &ret)
+{
+ if (pos && isIdentifier(str.unicode()[pos - 1].unicode())) {
+ return 0;
+ }
+ int sl;
+ for (sl = 0; isIdentifier(str.unicode()[pos + sl].unicode()); sl++)
+ ;
+ if (!sl) {
+ return 0;
+ }
+ if (expandMacro(str.mid(pos, sl), ret)) {
+ return sl;
+ }
+ return 0;
+}
+
+int
+KWordMacroExpander::expandEscapedMacro(const QString &str, int pos, QStringList &ret)
+{
+ if (str.length() <= pos + 1) {
+ return 0;
+ }
+
+ if (str.unicode()[pos + 1] == escapeChar()) {
+ ret += QString(escapeChar());
+ return 2;
+ }
+ int sl, rsl, rpos;
+ if (str.unicode()[pos + 1].unicode() == '{') {
+ rpos = pos + 2;
+ if ((sl = str.indexOf(QLatin1Char('}'), rpos)) < 0) {
+ return 0;
+ }
+ sl -= rpos;
+ rsl = sl + 3;
+ } else {
+ rpos = pos + 1;
+ for (sl = 0; isIdentifier(str.unicode()[rpos + sl].unicode()); ++sl)
+ ;
+ rsl = sl + 1;
+ }
+ if (!sl) {
+ return 0;
+ }
+ if (expandMacro(str.mid(rpos, sl), ret)) {
+ return rsl;
+ }
+ return 0;
+}
+
+////////////
+
+template <typename KT, typename VT>
+inline QString
+TexpandMacros(const QString &ostr, const QHash<KT, VT> &map, QChar c)
+{
+ QString str(ostr);
+ KMacroMapExpander<KT, VT> kmx(map, c);
+ kmx.expandMacros(str);
+ return str;
+}
+
+template <typename KT, typename VT>
+inline QString
+TexpandMacrosShellQuote(const QString &ostr, const QHash<KT, VT> &map, QChar c)
+{
+ QString str(ostr);
+ KMacroMapExpander<KT, VT> kmx(map, c);
+ if (!kmx.expandMacrosShellQuote(str)) {
+ return QString();
+ }
+ return str;
+}
+
+// public API
+namespace KMacroExpander
+{
+
+QString expandMacros(const QString &ostr, const QHash<QChar, QString> &map, QChar c)
+{
+ return TexpandMacros(ostr, map, c);
+}
+QString expandMacrosShellQuote(const QString &ostr, const QHash<QChar, QString> &map, QChar c)
+{
+ return TexpandMacrosShellQuote(ostr, map, c);
+}
+QString expandMacros(const QString &ostr, const QHash<QString, QString> &map, QChar c)
+{
+ return TexpandMacros(ostr, map, c);
+}
+QString expandMacrosShellQuote(const QString &ostr, const QHash<QString, QString> &map, QChar c)
+{
+ return TexpandMacrosShellQuote(ostr, map, c);
+}
+QString expandMacros(const QString &ostr, const QHash<QChar, QStringList> &map, QChar c)
+{
+ return TexpandMacros(ostr, map, c);
+}
+QString expandMacrosShellQuote(const QString &ostr, const QHash<QChar, QStringList> &map, QChar c)
+{
+ return TexpandMacrosShellQuote(ostr, map, c);
+}
+QString expandMacros(const QString &ostr, const QHash<QString, QStringList> &map, QChar c)
+{
+ return TexpandMacros(ostr, map, c);
+}
+QString expandMacrosShellQuote(const QString &ostr, const QHash<QString, QStringList> &map, QChar c)
+{
+ return TexpandMacrosShellQuote(ostr, map, c);
+}
+
+} // namespace
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ Copyright (c) 2002-2003 Oswald Buddenhagen <ossi@kde.org>
+ Copyright (c) 2003 Waldo Bastian <bastian@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+#ifndef KMACROEXPANDER_H
+#define KMACROEXPANDER_H
+
+#include <kcoreaddons_export.h>
+#include <QChar>
+
+class QString;
+class QStringList;
+template <typename KT, typename VT> class QHash;
+class KMacroExpanderBasePrivate;
+
+/**
+ * \class KMacroExpanderBase kmacroexpander.h <KMacroExpanderBase>
+ *
+ * Abstract base class for the worker classes behind the KMacroExpander namespace
+ * and the KCharMacroExpander and KWordMacroExpander classes.
+ *
+ * @author Oswald Buddenhagen <ossi@kde.org>
+ */
+class KCOREADDONS_EXPORT KMacroExpanderBase
+{
+
+public:
+ /**
+ * Constructor.
+ * @param c escape char indicating start of macros, or QChar::null for none
+ */
+ explicit KMacroExpanderBase(QChar c = QLatin1Char('%'));
+
+ /**
+ * Destructor.
+ */
+ virtual ~KMacroExpanderBase();
+
+ /**
+ * Perform safe macro expansion (substitution) on a string.
+ *
+ * @param str the string in which macros are expanded in-place
+ */
+ void expandMacros(QString &str);
+
+ // TODO: This documentation is relevant for end-users. Where to put it?
+ /**
+ * Perform safe macro expansion (substitution) on a string for use
+ * in shell commands.
+ *
+ * <h3>*NIX notes</h3>
+ *
+ * Explicitly supported shell constructs:
+ * \ '' "" $'' $"" {} () $(()) ${} $() ``
+ *
+ * Implicitly supported shell constructs:
+ * (())
+ *
+ * Unsupported shell constructs that will cause problems:
+ * Shortened "<tt>case $v in pat)</tt>" syntax. Use
+ * "<tt>case $v in (pat)</tt>" instead.
+ *
+ * The rest of the shell (incl. bash) syntax is simply ignored,
+ * as it is not expected to cause problems.
+ *
+ * Note that bash contains a bug which makes macro expansion within
+ * double quoted substitutions (<tt>"${VAR:-%macro}"</tt>) inherently
+ * insecure.
+ *
+ * For security reasons, @em never put expandos in command line arguments
+ * that are shell commands by themselves -
+ * "<tt>sh -c 'foo \%f'</tt>" is taboo.
+ * "<tt>file=\%f sh -c 'foo "$file"'</tt>" is OK.
+ *
+ * <h3>Windows notes</h3>
+ *
+ * All quoting syntax supported by KShell is supported here as well.
+ * Additionally, command grouping via parentheses is recognized - note
+ * however, that the parser is much stricter about unquoted parentheses
+ * than cmd itself.
+ * The rest of the cmd syntax is simply ignored, as it is not expected
+ * to cause problems - do not use commands that embed other commands,
+ * though - "<tt>for /f ...</tt>" is taboo.
+ *
+ * @param str the string in which macros are expanded in-place
+ * @param pos the position inside the string at which parsing/substitution
+ * should start, and upon exit where processing stopped
+ * @return false if the string could not be parsed and therefore no safe
+ * substitution was possible. Note that macros will have been processed
+ * up to the point where the error occurred. An unmatched closing paren
+ * or brace outside any shell construct is @em not an error (unlike in
+ * the function below), but still prematurely terminates processing.
+ */
+ bool expandMacrosShellQuote(QString &str, int &pos);
+
+ /**
+ * Same as above, but always starts at position 0, and unmatched closing
+ * parens and braces are treated as errors.
+ */
+ bool expandMacrosShellQuote(QString &str);
+
+ /**
+ * Set the macro escape character.
+ * @param c escape char indicating start of macros, or QChar::null if none
+ */
+ void setEscapeChar(QChar c);
+
+ /**
+ * Obtain the macro escape character.
+ * @return escape char indicating start of macros, or QChar::null if none
+ */
+ QChar escapeChar() const;
+
+protected:
+ /**
+ * This function is called for every single char within the string if
+ * the escape char is QChar::null. It should determine whether the
+ * string starting at @p pos within @p str is a valid macro and return
+ * the substitution value for it if so.
+ * @param str the input string
+ * @param pos the offset within @p str
+ * @param ret return value: the string to substitute for the macro
+ * @return If greater than zero, the number of chars at @p pos in @p str
+ * to substitute with @p ret (i.e., a valid macro was found). If less
+ * than zero, subtract this value from @p pos (to skip a macro, i.e.,
+ * substitute it with itself). If zero, no macro starts at @p pos.
+ */
+ virtual int expandPlainMacro(const QString &str, int pos, QStringList &ret);
+
+ /**
+ * This function is called every time the escape char is found if it is
+ * not QChar::null. It should determine whether the
+ * string starting at @p pos witin @p str is a valid macro and return
+ * the substitution value for it if so.
+ * @param str the input string
+ * @param pos the offset within @p str. Note that this is the position of
+ * the occurrence of the escape char
+ * @param ret return value: the string to substitute for the macro
+ * @return If greater than zero, the number of chars at @p pos in @p str
+ * to substitute with @p ret (i.e., a valid macro was found). If less
+ * than zero, subtract this value from @p pos (to skip a macro, i.e.,
+ * substitute it with itself). If zero, scanning continues as if no
+ * escape char was encountered at all.
+ */
+ virtual int expandEscapedMacro(const QString &str, int pos, QStringList &ret);
+
+private:
+ KMacroExpanderBasePrivate *const d;
+};
+
+/**
+ * \class KWordMacroExpander kmacroexpander.h <KMacroExpanderBase>
+ *
+ * Abstract base class for simple word macro substitutors. Use this instead of
+ * the functions in the KMacroExpander namespace if speculatively pre-filling
+ * the substitution map would be too expensive.
+ *
+ * A typical application:
+ *
+ * \code
+ * class MyClass {
+ * ...
+ * private:
+ * QString m_str;
+ * ...
+ * friend class MyExpander;
+ * };
+ *
+ * class MyExpander : public KWordMacroExpander {
+ * public:
+ * MyExpander( MyClass *_that ) : KWordMacroExpander(), that( _that ) {}
+ * protected:
+ * virtual bool expandMacro( const QString &str, QStringList &ret );
+ * private:
+ * MyClass *that;
+ * };
+ *
+ * bool MyExpander::expandMacro( const QString &str, QStringList &ret )
+ * {
+ * if (str == "macro") {
+ * ret += complexOperation( that->m_str );
+ * return true;
+ * }
+ * return false;
+ * }
+ *
+ * ... MyClass::...(...)
+ * {
+ * QString str;
+ * ...
+ * MyExpander mx( this );
+ * mx.expandMacrosShellQuote( str );
+ * ...
+ * }
+ * \endcode
+ *
+ * Alternatively MyClass could inherit from KWordMacroExpander directly.
+ *
+ * @author Oswald Buddenhagen <ossi@kde.org>
+ */
+class KCOREADDONS_EXPORT KWordMacroExpander : public KMacroExpanderBase
+{
+
+public:
+ /**
+ * Constructor.
+ * @param c escape char indicating start of macros, or QChar::null for none
+ */
+ explicit KWordMacroExpander(QChar c = QLatin1Char('%')) : KMacroExpanderBase(c) {}
+
+protected:
+ /** \internal Not to be called or reimplemented. */
+ int expandPlainMacro(const QString &str, int pos, QStringList &ret) override;
+ /** \internal Not to be called or reimplemented. */
+ int expandEscapedMacro(const QString &str, int pos, QStringList &ret) override;
+
+ /**
+ * Return substitution list @p ret for string macro @p str.
+ * @param str the macro to expand
+ * @param ret return variable reference. It is guaranteed to be empty
+ * when expandMacro is entered.
+ * @return @c true iff @p chr was a recognized macro name
+ */
+ virtual bool expandMacro(const QString &str, QStringList &ret) = 0;
+};
+
+/**
+ * \class KCharMacroExpander kmacroexpander.h <KMacroExpanderBase>
+ *
+ * Abstract base class for single char macro substitutors. Use this instead of
+ * the functions in the KMacroExpander namespace if speculatively pre-filling
+ * the substitution map would be too expensive.
+ *
+ * See KWordMacroExpander for a sample application.
+ *
+ * @author Oswald Buddenhagen <ossi@kde.org>
+ */
+class KCOREADDONS_EXPORT KCharMacroExpander : public KMacroExpanderBase
+{
+
+public:
+ /**
+ * Constructor.
+ * @param c escape char indicating start of macros, or QChar::null for none
+ */
+ explicit KCharMacroExpander(QChar c = QLatin1Char('%')) : KMacroExpanderBase(c) {}
+
+protected:
+ /** \internal Not to be called or reimplemented. */
+ int expandPlainMacro(const QString &str, int pos, QStringList &ret) override;
+ /** \internal Not to be called or reimplemented. */
+ int expandEscapedMacro(const QString &str, int pos, QStringList &ret) override;
+
+ /**
+ * Return substitution list @p ret for single-character macro @p chr.
+ * @param chr the macro to expand
+ * @param ret return variable reference. It is guaranteed to be empty
+ * when expandMacro is entered.
+ * @return @c true iff @p chr was a recognized macro name
+ */
+ virtual bool expandMacro(QChar chr, QStringList &ret) = 0;
+};
+
+/**
+ * A group of functions providing macro expansion (substitution) in strings,
+ * optionally with quoting appropriate for shell execution.
+ */
+namespace KMacroExpander
+{
+/**
+ * Perform safe macro expansion (substitution) on a string.
+ * The escape char must be quoted with itself to obtain its literal
+ * representation in the resulting string.
+ *
+ * @param str The string to expand
+ * @param map map with substitutions
+ * @param c escape char indicating start of macro, or QChar::null if none
+ * @return the string with all valid macros expanded
+ *
+ * \code
+ * // Code example
+ * QHash<QChar,QString> map;
+ * map.insert('u', "/tmp/myfile.txt");
+ * map.insert('n', "My File");
+ * QString s = "%% Title: %u:%n";
+ * s = KMacroExpander::expandMacros(s, map);
+ * // s is now "% Title: /tmp/myfile.txt:My File";
+ * \endcode
+ */
+KCOREADDONS_EXPORT QString expandMacros(const QString &str, const QHash<QChar, QString> &map, QChar c = QLatin1Char('%'));
+
+/**
+ * Perform safe macro expansion (substitution) on a string for use
+ * in shell commands.
+ * The escape char must be quoted with itself to obtain its literal
+ * representation in the resulting string.
+ *
+ * @param str The string to expand
+ * @param map map with substitutions
+ * @param c escape char indicating start of macro, or QChar::null if none
+ * @return the string with all valid macros expanded, or a null string
+ * if a shell syntax error was detected in the command
+ *
+ * \code
+ * // Code example
+ * QHash<QChar,QString> map;
+ * map.insert('u', "/tmp/myfile.txt");
+ * map.insert('n', "My File");
+ * QString s = "kedit --caption %n %u";
+ * s = KMacroExpander::expandMacrosShellQuote(s, map);
+ * // s is now "kedit --caption 'My File' '/tmp/myfile.txt'";
+ * system(QFile::encodeName(s));
+ * \endcode
+ */
+KCOREADDONS_EXPORT QString expandMacrosShellQuote(const QString &str, const QHash<QChar, QString> &map,
+ QChar c = QLatin1Char('%'));
+
+/**
+ * Perform safe macro expansion (substitution) on a string.
+ * The escape char must be quoted with itself to obtain its literal
+ * representation in the resulting string.
+ * Macro names can consist of chars in the range [A-Za-z0-9_];
+ * use braces to delimit macros from following words starting
+ * with these chars, or to use other chars for macro names.
+ *
+ * @param str The string to expand
+ * @param map map with substitutions
+ * @param c escape char indicating start of macro, or QChar::null if none
+ * @return the string with all valid macros expanded
+ *
+ * \code
+ * // Code example
+ * QHash<QString,QString> map;
+ * map.insert("url", "/tmp/myfile.txt");
+ * map.insert("name", "My File");
+ * QString s = "Title: %{url}-%name";
+ * s = KMacroExpander::expandMacros(s, map);
+ * // s is now "Title: /tmp/myfile.txt-My File";
+ * \endcode
+ */
+KCOREADDONS_EXPORT QString expandMacros(const QString &str, const QHash<QString, QString> &map,
+ QChar c = QLatin1Char('%'));
+
+/**
+ * Perform safe macro expansion (substitution) on a string for use
+ * in shell commands. See KMacroExpanderBase::expandMacrosShellQuote()
+ * for the exact semantics.
+ * The escape char must be quoted with itself to obtain its literal
+ * representation in the resulting string.
+ * Macro names can consist of chars in the range [A-Za-z0-9_];
+ * use braces to delimit macros from following words starting
+ * with these chars, or to use other chars for macro names.
+ *
+ * @param str The string to expand
+ * @param map map with substitutions
+ * @param c escape char indicating start of macro, or QChar::null if none
+ * @return the string with all valid macros expanded, or a null string
+ * if a shell syntax error was detected in the command
+ *
+ * \code
+ * // Code example
+ * QHash<QString,QString> map;
+ * map.insert("url", "/tmp/myfile.txt");
+ * map.insert("name", "My File");
+ * QString s = "kedit --caption %name %{url}";
+ * s = KMacroExpander::expandMacrosShellQuote(s, map);
+ * // s is now "kedit --caption 'My File' '/tmp/myfile.txt'";
+ * system(QFile::encodeName(s));
+ * \endcode
+ */
+KCOREADDONS_EXPORT QString expandMacrosShellQuote(const QString &str, const QHash<QString, QString> &map,
+ QChar c = QLatin1Char('%'));
+
+/**
+ * Same as above, except that the macros expand to string lists that
+ * are simply join(" ")ed together.
+ */
+KCOREADDONS_EXPORT QString expandMacros(const QString &str, const QHash<QChar, QStringList> &map,
+ QChar c = QLatin1Char('%'));
+KCOREADDONS_EXPORT QString expandMacros(const QString &str, const QHash<QString, QStringList> &map,
+ QChar c = QLatin1Char('%'));
+
+/**
+ * Same as above, except that the macros expand to string lists.
+ * If the macro appears inside a quoted string, the list is simply
+ * join(" ")ed together; otherwise every element expands to a separate
+ * quoted string.
+ */
+KCOREADDONS_EXPORT QString expandMacrosShellQuote(const QString &str, const QHash<QChar, QStringList> &map,
+ QChar c = QLatin1Char('%'));
+KCOREADDONS_EXPORT QString expandMacrosShellQuote(const QString &str, const QHash<QString, QStringList> &map,
+ QChar c = QLatin1Char('%'));
+}
+
+#endif /* KMACROEXPANDER_H */
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ Copyright (c) 2002-2003,2007 Oswald Buddenhagen <ossi@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef KMACROEXPANDER_P_H
+#define KMACROEXPANDER_P_H
+
+#include "kmacroexpander.h"
+
+class KMacroExpanderBasePrivate
+{
+public:
+ KMacroExpanderBasePrivate(QChar c) : escapechar(c) {}
+ QChar escapechar;
+};
+
+#endif
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ Copyright (c) 2002-2003 Oswald Buddenhagen <ossi@kde.org>
+ Copyright (c) 2003 Waldo Bastian <bastian@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include "kmacroexpander_p.h"
+
+#include <QStringList>
+#include <QStack>
+#include <QRegExp>
+
+namespace KMacroExpander
+{
+
+enum Quoting { noquote, singlequote, doublequote, dollarquote,
+ paren, subst, group, math
+ };
+typedef struct {
+ Quoting current;
+ bool dquote;
+} State;
+typedef struct {
+ QString str;
+ int pos;
+} Save;
+
+}
+
+using namespace KMacroExpander;
+
+#pragma message("TODO: Import these methods into Qt")
+
+inline static bool isSpecial(QChar cUnicode)
+{
+ static const uchar iqm[] = {
+ 0xff, 0xff, 0xff, 0xff, 0xdf, 0x07, 0x00, 0xd8,
+ 0x00, 0x00, 0x00, 0x38, 0x01, 0x00, 0x00, 0x78
+ }; // 0-32 \'"$`<>|;&(){}*?#!~[]
+
+ uint c = cUnicode.unicode();
+ return (c < sizeof(iqm) * 8) && (iqm[c / 8] & (1 << (c & 7)));
+}
+
+static QString quoteArg(const QString &arg)
+{
+ if (!arg.length()) {
+ return QString::fromLatin1("''");
+ }
+ for (int i = 0; i < arg.length(); i++)
+ if (isSpecial(arg.unicode()[i])) {
+ QChar q(QLatin1Char('\''));
+ return QString(arg).replace(q, QLatin1String("'\\''")).prepend(q).append(q);
+ }
+ return arg;
+}
+
+static QString joinArgs(const QStringList &args)
+{
+ QString ret;
+ for (QStringList::ConstIterator it = args.begin(); it != args.end(); ++it) {
+ if (!ret.isEmpty()) {
+ ret.append(QLatin1Char(' '));
+ }
+ ret.append(quoteArg(*it));
+ }
+ return ret;
+}
+
+bool KMacroExpanderBase::expandMacrosShellQuote(QString &str, int &pos)
+{
+ int len;
+ int pos2;
+ ushort ec = d->escapechar.unicode();
+ State state = { noquote, false };
+ QStack<State> sstack;
+ QStack<Save> ostack;
+ QStringList rst;
+ QString rsts;
+
+ while (pos < str.length()) {
+ ushort cc = str.unicode()[pos].unicode();
+ if (ec != 0) {
+ if (cc != ec) {
+ goto nohit;
+ }
+ if (!(len = expandEscapedMacro(str, pos, rst))) {
+ goto nohit;
+ }
+ } else {
+ if (!(len = expandPlainMacro(str, pos, rst))) {
+ goto nohit;
+ }
+ }
+ if (len < 0) {
+ pos -= len;
+ continue;
+ }
+ if (state.dquote) {
+ rsts = rst.join(QLatin1String(" "));
+ rsts.replace(QRegExp(QLatin1String("([$`\"\\\\])")), QLatin1String("\\\\1"));
+ } else if (state.current == dollarquote) {
+ rsts = rst.join(QLatin1String(" "));
+ rsts.replace(QRegExp(QLatin1String("(['\\\\])")), QLatin1String("\\\\1"));
+ } else if (state.current == singlequote) {
+ rsts = rst.join(QLatin1String(" "));
+ rsts.replace(QLatin1Char('\''), QLatin1String("'\\''"));
+ } else {
+ if (rst.isEmpty()) {
+ str.remove(pos, len);
+ continue;
+ } else {
+ rsts = joinArgs(rst);
+ }
+ }
+ rst.clear();
+ str.replace(pos, len, rsts);
+ pos += rsts.length();
+ continue;
+ nohit:
+ if (state.current == singlequote) {
+ if (cc == '\'') {
+ state = sstack.pop();
+ }
+ } else if (cc == '\\') {
+ // always swallow the char -> prevent anomalies due to expansion
+ pos += 2;
+ continue;
+ } else if (state.current == dollarquote) {
+ if (cc == '\'') {
+ state = sstack.pop();
+ }
+ } else if (cc == '$') {
+ cc = str.unicode()[++pos].unicode();
+ if (cc == '(') {
+ sstack.push(state);
+ if (str.unicode()[pos + 1].unicode() == '(') {
+ Save sav = { str, pos + 2 };
+ ostack.push(sav);
+ state.current = math;
+ pos += 2;
+ continue;
+ } else {
+ state.current = paren;
+ state.dquote = false;
+ }
+ } else if (cc == '{') {
+ sstack.push(state);
+ state.current = subst;
+ } else if (!state.dquote) {
+ if (cc == '\'') {
+ sstack.push(state);
+ state.current = dollarquote;
+ } else if (cc == '"') {
+ sstack.push(state);
+ state.current = doublequote;
+ state.dquote = true;
+ }
+ }
+ // always swallow the char -> prevent anomalies due to expansion
+ } else if (cc == '`') {
+ str.replace(pos, 1, QLatin1String("$( ")); // add space -> avoid creating $((
+ pos2 = pos += 3;
+ for (;;) {
+ if (pos2 >= str.length()) {
+ pos = pos2;
+ return false;
+ }
+ cc = str.unicode()[pos2].unicode();
+ if (cc == '`') {
+ break;
+ }
+ if (cc == '\\') {
+ cc = str.unicode()[++pos2].unicode();
+ if (cc == '$' || cc == '`' || cc == '\\' ||
+ (cc == '"' && state.dquote)) {
+ str.remove(pos2 - 1, 1);
+ continue;
+ }
+ }
+ pos2++;
+ }
+ str[pos2] = QLatin1Char(')');
+ sstack.push(state);
+ state.current = paren;
+ state.dquote = false;
+ continue;
+ } else if (state.current == doublequote) {
+ if (cc == '"') {
+ state = sstack.pop();
+ }
+ } else if (cc == '\'') {
+ if (!state.dquote) {
+ sstack.push(state);
+ state.current = singlequote;
+ }
+ } else if (cc == '"') {
+ if (!state.dquote) {
+ sstack.push(state);
+ state.current = doublequote;
+ state.dquote = true;
+ }
+ } else if (state.current == subst) {
+ if (cc == '}') {
+ state = sstack.pop();
+ }
+ } else if (cc == ')') {
+ if (state.current == math) {
+ if (str.unicode()[pos + 1].unicode() == ')') {
+ state = sstack.pop();
+ pos += 2;
+ } else {
+ // false hit: the $(( was a $( ( in fact
+ // ash does not care, but bash does
+ pos = ostack.top().pos;
+ str = ostack.top().str;
+ ostack.pop();
+ state.current = paren;
+ state.dquote = false;
+ sstack.push(state);
+ }
+ continue;
+ } else if (state.current == paren) {
+ state = sstack.pop();
+ } else {
+ break;
+ }
+ } else if (cc == '}') {
+ if (state.current == KMacroExpander::group) {
+ state = sstack.pop();
+ } else {
+ break;
+ }
+ } else if (cc == '(') {
+ sstack.push(state);
+ state.current = paren;
+ } else if (cc == '{') {
+ sstack.push(state);
+ state.current = KMacroExpander::group;
+ }
+ pos++;
+ }
+ return sstack.empty();
+}
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ Copyright (c) 2008 Oswald Buddenhagen <ossi@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include "kmacroexpander_p.h"
+#include "kshell_p.h"
+
+#include "kshell.h"
+
+#include <QString>
+#include <QStringList>
+
+bool KMacroExpanderBase::expandMacrosShellQuote(QString &str, int &pos)
+{
+ int len;
+ int pos2;
+ ushort uc;
+ ushort ec = d->escapechar.unicode();
+ bool shellQuote = false; // shell is in quoted state
+ bool crtQuote = false; // c runtime is in quoted state
+ bool escaped = false; // previous char was a circumflex
+ int bslashes = 0; // previous chars were backslashes
+ int parens = 0; // parentheses nesting level
+ QStringList rst;
+ QString rsts;
+
+ while (pos < str.length()) {
+ ushort cc = str.unicode()[pos].unicode();
+ if (escaped) { // prevent anomalies due to expansion
+ goto notcf;
+ }
+ if (ec != 0) {
+ if (cc != ec) {
+ goto nohit;
+ }
+ if (!(len = expandEscapedMacro(str, pos, rst))) {
+ goto nohit;
+ }
+ } else {
+ if (!(len = expandPlainMacro(str, pos, rst))) {
+ goto nohit;
+ }
+ }
+ if (len < 0) {
+ pos -= len;
+ continue;
+ }
+ if (shellQuote != crtQuote) { // Silly, isn't it? Ahoy to Redmond.
+ return false;
+ }
+ if (shellQuote) {
+ rsts = KShell::quoteArgInternal(rst.join(QLatin1String(" ")), true);
+ } else {
+ if (rst.isEmpty()) {
+ str.remove(pos, len);
+ continue;
+ }
+ rsts = KShell::joinArgs(rst);
+ }
+ pos2 = 0;
+ while (pos2 < rsts.length() &&
+ ((uc = rsts.unicode()[pos2].unicode()) == '\\' || uc == '^')) {
+ pos2++;
+ }
+ if (pos2 < rsts.length() && rsts.unicode()[pos2].unicode() == '"') {
+ QString bsl;
+ bsl.reserve(bslashes);
+ for (; bslashes; bslashes--) {
+ bsl.append(QLatin1String("\\"));
+ }
+ rsts.prepend(bsl);
+ }
+ bslashes = 0;
+ rst.clear();
+ str.replace(pos, len, rsts);
+ pos += rsts.length();
+ continue;
+ nohit:
+ if (!escaped && !shellQuote && cc == '^') {
+ escaped = true;
+ } else {
+ notcf:
+ if (cc == '\\') {
+ bslashes++;
+ } else {
+ if (cc == '"') {
+ if (!escaped) {
+ shellQuote = !shellQuote;
+ }
+ if (!(bslashes & 1)) {
+ crtQuote = !crtQuote;
+ }
+ } else if (!shellQuote) {
+ if (cc == '(') {
+ parens++;
+ } else if (cc == ')')
+ if (--parens < 0) {
+ break;
+ }
+ }
+ bslashes = 0;
+ }
+ escaped = false;
+ }
+ pos++;
+ }
+ return true;
+}
--- /dev/null
+/* This file is part of the KDE libraries
+ Copyright (C) 1999 Ian Zepp (icszepp@islc.net)
+ Copyright (C) 2006 by Dominic Battre <dominic@battre.de>
+ Copyright (C) 2006 by Martin Pool <mbp@canonical.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include "kstringhandler.h"
+
+#include <stdlib.h> // random()
+
+#include <QRegExp> // for the word ranges
+#include <QCharRef>
+#include <QMutableStringListIterator>
+#include <QVector>
+
+//
+// Capitalization routines
+//
+QString KStringHandler::capwords(const QString &text)
+{
+ if (text.isEmpty()) {
+ return text;
+ }
+
+ const QString strippedText = text.trimmed();
+ const QString space = QString(QLatin1Char(' '));
+ const QStringList words = capwords(strippedText.split(space));
+
+ QString result = text;
+ result.replace(strippedText, words.join(space));
+ return result;
+}
+
+QStringList KStringHandler::capwords(const QStringList &list)
+{
+ QStringList tmp = list;
+ for (QStringList::Iterator it = tmp.begin(); it != tmp.end(); ++it) {
+ *it = (*it)[ 0 ].toUpper() + (*it).midRef(1);
+ }
+ return tmp;
+}
+
+QString KStringHandler::lsqueeze(const QString &str, int maxlen)
+{
+ if (str.length() > maxlen) {
+ int part = maxlen - 3;
+ return QStringLiteral("...") + str.rightRef(part);
+ } else {
+ return str;
+ }
+}
+
+QString KStringHandler::csqueeze(const QString &str, int maxlen)
+{
+ if (str.length() > maxlen && maxlen > 3) {
+ const int part = (maxlen - 3) / 2;
+ return str.leftRef(part) + QStringLiteral("...") + str.rightRef(part);
+ } else {
+ return str;
+ }
+}
+
+QString KStringHandler::rsqueeze(const QString &str, int maxlen)
+{
+ if (str.length() > maxlen) {
+ int part = maxlen - 3;
+ return str.leftRef(part) + QStringLiteral("...");
+ } else {
+ return str;
+ }
+}
+
+QStringList KStringHandler::perlSplit(const QString &sep, const QString &s, int max)
+{
+ bool ignoreMax = 0 == max;
+
+ QStringList l;
+
+ int searchStart = 0;
+
+ int tokenStart = s.indexOf(sep, searchStart);
+
+ while (-1 != tokenStart && (ignoreMax || l.count() < max - 1)) {
+ if (!s.midRef(searchStart, tokenStart - searchStart).isEmpty()) {
+ l << s.mid(searchStart, tokenStart - searchStart);
+ }
+
+ searchStart = tokenStart + sep.length();
+ tokenStart = s.indexOf(sep, searchStart);
+ }
+
+ if (!s.midRef(searchStart, s.length() - searchStart).isEmpty()) {
+ l << s.mid(searchStart, s.length() - searchStart);
+ }
+
+ return l;
+}
+
+QStringList KStringHandler::perlSplit(const QChar &sep, const QString &s, int max)
+{
+ bool ignoreMax = 0 == max;
+
+ QStringList l;
+
+ int searchStart = 0;
+
+ int tokenStart = s.indexOf(sep, searchStart);
+
+ while (-1 != tokenStart && (ignoreMax || l.count() < max - 1)) {
+ if (!s.midRef(searchStart, tokenStart - searchStart).isEmpty()) {
+ l << s.mid(searchStart, tokenStart - searchStart);
+ }
+
+ searchStart = tokenStart + 1;
+ tokenStart = s.indexOf(sep, searchStart);
+ }
+
+ if (!s.midRef(searchStart, s.length() - searchStart).isEmpty()) {
+ l << s.mid(searchStart, s.length() - searchStart);
+ }
+
+ return l;
+}
+
+QStringList KStringHandler::perlSplit(const QRegExp &sep, const QString &s, int max)
+{
+ bool ignoreMax = 0 == max;
+
+ QStringList l;
+
+ int searchStart = 0;
+ int tokenStart = sep.indexIn(s, searchStart);
+ int len = sep.matchedLength();
+
+ while (-1 != tokenStart && (ignoreMax || l.count() < max - 1)) {
+ if (!s.midRef(searchStart, tokenStart - searchStart).isEmpty()) {
+ l << s.mid(searchStart, tokenStart - searchStart);
+ }
+
+ searchStart = tokenStart + len;
+ tokenStart = sep.indexIn(s, searchStart);
+ len = sep.matchedLength();
+ }
+
+ if (!s.midRef(searchStart, s.length() - searchStart).isEmpty()) {
+ l << s.mid(searchStart, s.length() - searchStart);
+ }
+
+ return l;
+}
+
+QString KStringHandler::tagUrls(const QString &text)
+{
+ /*static*/ QRegExp urlEx(QStringLiteral("(www\\.(?!\\.)|(fish|(f|ht)tp(|s))://)[\\d\\w\\./,:_~\\?=&;#@\\-\\+\\%\\$]+[\\d\\w/]"));
+
+ QString richText(text);
+ int urlPos = 0, urlLen;
+ while ((urlPos = urlEx.indexIn(richText, urlPos)) >= 0) {
+ urlLen = urlEx.matchedLength();
+ QString href = richText.mid(urlPos, urlLen);
+ // Qt doesn't support (?<=pattern) so we do it here
+ if ((urlPos > 0) && richText[urlPos - 1].isLetterOrNumber()) {
+ urlPos++;
+ continue;
+ }
+ // Don't use QString::arg since %01, %20, etc could be in the string
+ QString anchor = QStringLiteral("<a href=\"") + href + QStringLiteral("\">") + href + QStringLiteral("</a>");
+ richText.replace(urlPos, urlLen, anchor);
+
+ urlPos += anchor.length();
+ }
+ return richText;
+}
+
+QString KStringHandler::obscure(const QString &str)
+{
+ QString result;
+ const QChar *unicode = str.unicode();
+ for (int i = 0; i < str.length(); ++i)
+ // yes, no typo. can't encode ' ' or '!' because
+ // they're the unicode BOM. stupid scrambling. stupid.
+ result += (unicode[ i ].unicode() <= 0x21) ? unicode[ i ] :
+ QChar(0x1001F - unicode[ i ].unicode());
+
+ return result;
+}
+
+bool KStringHandler::isUtf8(const char *buf)
+{
+ int i, n;
+ unsigned char c;
+ bool gotone = false;
+
+ if (!buf) {
+ return true; // whatever, just don't crash
+ }
+
+#define F 0 /* character never appears in text */
+#define T 1 /* character appears in plain ASCII text */
+#define I 2 /* character appears in ISO-8859 text */
+#define X 3 /* character appears in non-ISO extended ASCII (Mac, IBM PC) */
+
+ static const unsigned char text_chars[256] = {
+ /* BEL BS HT LF FF CR */
+ F, F, F, F, F, F, F, T, T, T, T, F, T, T, F, F, /* 0x0X */
+ /* ESC */
+ F, F, F, F, F, F, F, F, F, F, F, T, F, F, F, F, /* 0x1X */
+ T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, /* 0x2X */
+ T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, /* 0x3X */
+ T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, /* 0x4X */
+ T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, /* 0x5X */
+ T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, /* 0x6X */
+ T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, F, /* 0x7X */
+ /* NEL */
+ X, X, X, X, X, T, X, X, X, X, X, X, X, X, X, X, /* 0x8X */
+ X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, /* 0x9X */
+ I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, /* 0xaX */
+ I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, /* 0xbX */
+ I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, /* 0xcX */
+ I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, /* 0xdX */
+ I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, /* 0xeX */
+ I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I /* 0xfX */
+ };
+
+ /* *ulen = 0; */
+ for (i = 0; (c = buf[i]); ++i) {
+ if ((c & 0x80) == 0) { /* 0xxxxxxx is plain ASCII */
+ /*
+ * Even if the whole file is valid UTF-8 sequences,
+ * still reject it if it uses weird control characters.
+ */
+
+ if (text_chars[c] != T) {
+ return false;
+ }
+
+ } else if ((c & 0x40) == 0) { /* 10xxxxxx never 1st byte */
+ return false;
+ } else { /* 11xxxxxx begins UTF-8 */
+ int following;
+
+ if ((c & 0x20) == 0) { /* 110xxxxx */
+ following = 1;
+ } else if ((c & 0x10) == 0) { /* 1110xxxx */
+ following = 2;
+ } else if ((c & 0x08) == 0) { /* 11110xxx */
+ following = 3;
+ } else if ((c & 0x04) == 0) { /* 111110xx */
+ following = 4;
+ } else if ((c & 0x02) == 0) { /* 1111110x */
+ following = 5;
+ } else {
+ return false;
+ }
+
+ for (n = 0; n < following; ++n) {
+ i++;
+ if (!(c = buf[i])) {
+ goto done;
+ }
+
+ if ((c & 0x80) == 0 || (c & 0x40)) {
+ return false;
+ }
+ }
+ gotone = true;
+ }
+ }
+done:
+ return gotone; /* don't claim it's UTF-8 if it's all 7-bit */
+}
+
+#undef F
+#undef T
+#undef I
+#undef X
+
+QString KStringHandler::from8Bit(const char *str)
+{
+ if (!str) {
+ return QString();
+ }
+ if (!*str) {
+ static const QLatin1String emptyString("");
+ return emptyString;
+ }
+ return KStringHandler::isUtf8(str) ?
+ QString::fromUtf8(str) :
+ QString::fromLocal8Bit(str);
+}
+
+QString KStringHandler::preProcessWrap(const QString &text)
+{
+ const QChar zwsp(0x200b);
+
+ QString result;
+ result.reserve(text.length());
+
+ for (int i = 0; i < text.length(); i++) {
+ const QChar c = text[i];
+ bool openingParens = (c == QLatin1Char('(') || c == QLatin1Char('{') || c == QLatin1Char('['));
+ bool singleQuote = (c == QLatin1Char('\''));
+ bool closingParens = (c == QLatin1Char(')') || c == QLatin1Char('}') || c == QLatin1Char(']'));
+ bool breakAfter = (closingParens || c.isPunct() || c.isSymbol());
+ bool nextIsSpace = (i == (text.length() - 1) || text[i + 1].isSpace());
+ bool prevIsSpace = (i == 0 || text[i - 1].isSpace() || result[result.length() - 1] == zwsp);
+
+ // Provide a breaking opportunity before opening parenthesis
+ if (openingParens && !prevIsSpace) {
+ result += zwsp;
+ }
+
+ // Provide a word joiner before the single quote
+ if (singleQuote && !prevIsSpace) {
+ result += QChar(0x2060);
+ }
+
+ result += c;
+
+ if (breakAfter && !openingParens && !nextIsSpace && !singleQuote) {
+ result += zwsp;
+ }
+ }
+
+ return result;
+}
+
+int KStringHandler::logicalLength(const QString& text)
+{
+ int length = 0;
+ auto chrs = text.toUcs4();
+ for (auto chr : chrs) {
+ auto script = QChar::script(chr);
+ if (script == QChar::Script_Han ||
+ script == QChar::Script_Hangul ||
+ script == QChar::Script_Hiragana ||
+ script == QChar::Script_Katakana ||
+ script == QChar::Script_Yi ||
+ QChar::isHighSurrogate(chr)) {
+ length += 2;
+ } else {
+ length += 1;
+ }
+ }
+ return length;
+}
--- /dev/null
+/* This file is part of the KDE libraries
+ Copyright (C) 1999 Ian Zepp (icszepp@islc.net)
+ Copyright (C) 2000 Rik Hemsley (rikkus) <rik@kde.org>
+ Copyright (C) 2006 by Dominic Battre <dominic@battre.de>
+ Copyright (C) 2006 by Martin Pool <mbp@canonical.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+#ifndef KSTRINGHANDLER_H
+#define KSTRINGHANDLER_H
+
+#include <kcoreaddons_export.h>
+
+#include <qnamespace.h>
+
+class QChar;
+class QRegExp;
+class QString;
+class QStringList;
+
+/**
+ * This namespace contains utility functions for handling strings.
+ *
+ * The functions here are intended to provide an easy way to
+ * cut/slice/splice words inside sentences in whatever order desired.
+ * While the main focus of KStringHandler is words (ie characters
+ * separated by spaces/tabs), the two core functions here (split()
+ * and join()) will allow you to use any character as a separator
+ * This will make it easy to redefine what a 'word' means in the
+ * future if needed.
+ *
+ * The function names and calling styles are based on python and mIRC's
+ * scripting support.
+ *
+ * The ranges are a fairly powerful way of getting/stripping words from
+ * a string. These ranges function, for the large part, as they would in
+ * python. See the word(const QString&, int) and remword(const QString&, int)
+ * functions for more detail.
+ *
+ * The methods here are completely stateless. All strings are cut
+ * on the fly and returned as new qstrings/qstringlists.
+ *
+ * @short Namespace for manipulating words and sentences in strings
+ * @author Ian Zepp <icszepp@islc.net>
+ * @see KShell
+ */
+namespace KStringHandler
+{
+
+/** Capitalizes each word in the string
+ * "hello there" becomes "Hello There" (string)
+ * @param text the text to capitalize
+ * @return the resulting string
+ */
+KCOREADDONS_EXPORT QString capwords(const QString &text);
+
+/** Capitalizes each word in the list
+ * [hello, there] becomes [Hello, There] (list)
+ * @param list the list to capitalize
+ * @return the resulting list
+ */
+KCOREADDONS_EXPORT QStringList capwords(const QStringList &list);
+
+/** Substitute characters at the beginning of a string by "...".
+ * @param str is the string to modify
+ * @param maxlen is the maximum length the modified string will have
+ * If the original string is shorter than "maxlen", it is returned verbatim
+ * @return the modified string
+ */
+KCOREADDONS_EXPORT QString lsqueeze(const QString &str, int maxlen = 40);
+
+/** Substitute characters at the middle of a string by "...".
+ * @param str is the string to modify
+ * @param maxlen is the maximum length the modified string will have
+ * If the original string is shorter than "maxlen", it is returned verbatim
+ * @return the modified string
+ */
+KCOREADDONS_EXPORT QString csqueeze(const QString &str, int maxlen = 40);
+
+/** Substitute characters at the end of a string by "...".
+ * @param str is the string to modify
+ * @param maxlen is the maximum length the modified string will have
+ * If the original string is shorter than "maxlen", it is returned verbatim
+ * @return the modified string
+ */
+KCOREADDONS_EXPORT QString rsqueeze(const QString &str, int maxlen = 40);
+
+/**
+ * Split a QString into a QStringList in a similar fashion to the static
+ * QStringList function in Qt, except you can specify a maximum number
+ * of tokens. If max is specified (!= 0) then only that number of tokens
+ * will be extracted. The final token will be the remainder of the string.
+ *
+ * Example:
+ * \code
+ * perlSplit("__", "some__string__for__you__here", 4)
+ * QStringList contains: "some", "string", "for", "you__here"
+ * \endcode
+ *
+ * @param sep is the string to use to delimit s.
+ * @param s is the input string
+ * @param max is the maximum number of extractions to perform, or 0.
+ * @return A QStringList containing tokens extracted from s.
+ */
+KCOREADDONS_EXPORT QStringList perlSplit(const QString &sep,
+ const QString &s,
+ int max = 0);
+
+/**
+ * Split a QString into a QStringList in a similar fashion to the static
+ * QStringList function in Qt, except you can specify a maximum number
+ * of tokens. If max is specified (!= 0) then only that number of tokens
+ * will be extracted. The final token will be the remainder of the string.
+ *
+ * Example:
+ * \code
+ * perlSplit(' ', "kparts reaches the parts other parts can't", 3)
+ * QStringList contains: "kparts", "reaches", "the parts other parts can't"
+ * \endcode
+ *
+ * @param sep is the character to use to delimit s.
+ * @param s is the input string
+ * @param max is the maximum number of extractions to perform, or 0.
+ * @return A QStringList containing tokens extracted from s.
+ */
+KCOREADDONS_EXPORT QStringList perlSplit(const QChar &sep,
+ const QString &s,
+ int max = 0);
+
+/**
+ * Split a QString into a QStringList in a similar fashion to the static
+ * QStringList function in Qt, except you can specify a maximum number
+ * of tokens. If max is specified (!= 0) then only that number of tokens
+ * will be extracted. The final token will be the remainder of the string.
+ *
+ * Example:
+ * \code
+ * perlSplit(QRegExp("[! ]"), "Split me up ! I'm bored ! OK ?", 3)
+ * QStringList contains: "Split", "me", "up ! I'm bored ! OK ?"
+ * \endcode
+ *
+ * @param sep is the regular expression to use to delimit s.
+ * @param s is the input string
+ * @param max is the maximum number of extractions to perform, or 0.
+ * @return A QStringList containing tokens extracted from s.
+ */
+KCOREADDONS_EXPORT QStringList perlSplit(const QRegExp &sep,
+ const QString &s,
+ int max = 0);
+
+/**
+ * This method auto-detects URLs in strings, and adds HTML markup to them
+ * so that richtext or HTML-enabled widgets will display the URL correctly.
+ * @param text the string which may contain URLs
+ * @return the resulting text
+ */
+KCOREADDONS_EXPORT QString tagUrls(const QString &text);
+
+/**
+ Obscure string by using a simple symmetric encryption. Applying the
+ function to a string obscured by this function will result in the original
+ string.
+
+ The function can be used to obscure passwords stored to configuration
+ files. Note that this won't give you any more security than preventing
+ that the password is directly copied and pasted.
+
+ @param str string to be obscured
+ @return obscured string
+*/
+KCOREADDONS_EXPORT QString obscure(const QString &str);
+
+/**
+ Guess whether a string is UTF8 encoded.
+
+ @param str the string to check
+ @return true if UTF8. If false, the string is probably in Local8Bit.
+ */
+KCOREADDONS_EXPORT bool isUtf8(const char *str);
+
+/**
+ Construct QString from a c string, guessing whether it is UTF8- or
+ Local8Bit-encoded.
+
+ @param str the input string
+ @return the (hopefully correctly guessed) QString representation of @p str
+ @see KEncodingProber
+
+ */
+KCOREADDONS_EXPORT QString from8Bit(const char *str);
+
+/**
+ Preprocesses the given string in order to provide additional line breaking
+ opportunities for QTextLayout.
+
+ This is done by inserting ZWSP (Zero-width space) characters in the string
+ at points that wouldn't normally be considered word boundaries by QTextLayout,
+ but where wrapping the text will produce good results.
+
+ Examples of such points includes after punctuation signs, underscores and
+ dashes, that aren't followed by spaces.
+
+ @since 4.4
+*/
+KCOREADDONS_EXPORT QString preProcessWrap(const QString &text);
+
+/**
+ Returns the length that reflects the density of information in the text. In
+ general the character from CJK languages are assigned with weight 2, while
+ other Latin characters are assigned with 1.
+
+ @since 5.41
+*/
+KCOREADDONS_EXPORT int logicalLength(const QString &text);
+
+}
+#endif
--- /dev/null
+/*
+ Copyright (c) 2002 Dave Corrie <kde@davecorrie.com>
+ Copyright (c) 2014 Daniel Vrátil <dvratil@redhat.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include "ktexttohtml.h"
+#include "ktexttohtml_p.h"
+#include "ktexttohtmlemoticonsinterface.h"
+
+#include <QString>
+#include <QStringList>
+#include <QFile>
+#include <QRegExp>
+#include <QPluginLoader>
+#include <QVariant>
+#include <QCoreApplication>
+
+#include <limits.h>
+
+#include "kcoreaddons_debug.h"
+
+static KTextToHTMLEmoticonsInterface *s_emoticonsInterface = nullptr;
+
+static void loadEmoticonsPlugin()
+{
+ static bool triedLoadPlugin = false;
+ if (!triedLoadPlugin) {
+ triedLoadPlugin = true;
+
+ // Check if QGuiApplication::platformName property exists. This is a
+ // hackish way of determining whether we are running QGuiApplication,
+ // because we cannot load the FrameworkIntegration plugin into a
+ // QCoreApplication, as it would crash immediately
+ if (qApp->metaObject()->indexOfProperty("platformName") > -1) {
+ QPluginLoader lib(QStringLiteral("kf5/KEmoticonsIntegrationPlugin"));
+ QObject *rootObj = lib.instance();
+ if (rootObj) {
+ s_emoticonsInterface = rootObj->property(KTEXTTOHTMLEMOTICONS_PROPERTY).value<KTextToHTMLEmoticonsInterface*>();
+ }
+ }
+ }
+ if (!s_emoticonsInterface) {
+ s_emoticonsInterface = new KTextToHTMLEmoticonsDummy();
+ }
+}
+
+
+
+KTextToHTMLHelper::KTextToHTMLHelper(const QString &plainText, int pos, int maxUrlLen, int maxAddressLen)
+ : mText(plainText)
+ , mMaxUrlLen(maxUrlLen)
+ , mMaxAddressLen(maxAddressLen)
+ , mPos(pos)
+{
+}
+
+KTextToHTMLEmoticonsInterface* KTextToHTMLHelper::emoticonsInterface() const
+{
+ if (!s_emoticonsInterface) {
+ loadEmoticonsPlugin();
+ }
+ return s_emoticonsInterface;
+}
+
+QString KTextToHTMLHelper::getEmailAddress()
+{
+ QString address;
+
+ if (mText[mPos] == QLatin1Char('@')) {
+ // the following characters are allowed in a dot-atom (RFC 2822):
+ // a-z A-Z 0-9 . ! # $ % & ' * + - / = ? ^ _ ` { | } ~
+ static const QString allowedSpecialChars = QStringLiteral(".!#$%&'*+-/=?^_`{|}~");
+
+ // determine the local part of the email address
+ int start = mPos - 1;
+ while (start >= 0 && mText[start].unicode() < 128 &&
+ (mText[start].isLetterOrNumber() ||
+ mText[start] == QLatin1Char('@') || // allow @ to find invalid email addresses
+ allowedSpecialChars.indexOf(mText[start]) != -1)) {
+ if (mText[start] == QLatin1Char('@')) {
+ return QString(); // local part contains '@' -> no email address
+ }
+ --start;
+ }
+ ++start;
+ // we assume that an email address starts with a letter or a digit
+ while ((start < mPos) && !mText[start].isLetterOrNumber()) {
+ ++start;
+ }
+ if (start == mPos) {
+ return QString(); // local part is empty -> no email address
+ }
+
+ // determine the domain part of the email address
+ int dotPos = INT_MAX;
+ int end = mPos + 1;
+ while (end < mText.length() &&
+ (mText[end].isLetterOrNumber() ||
+ mText[end] == QLatin1Char('@') || // allow @ to find invalid email addresses
+ mText[end] == QLatin1Char('.') ||
+ mText[end] == QLatin1Char('-'))) {
+ if (mText[end] == QLatin1Char('@')) {
+ return QString(); // domain part contains '@' -> no email address
+ }
+ if (mText[end] == QLatin1Char('.')) {
+ dotPos = qMin(dotPos, end); // remember index of first dot in domain
+ }
+ ++end;
+ }
+ // we assume that an email address ends with a letter or a digit
+ while ((end > mPos) && !mText[end - 1].isLetterOrNumber()) {
+ --end;
+ }
+ if (end == mPos) {
+ return QString(); // domain part is empty -> no email address
+ }
+ if (dotPos >= end) {
+ return QString(); // domain part doesn't contain a dot
+ }
+
+ if (end - start > mMaxAddressLen) {
+ return QString(); // too long -> most likely no email address
+ }
+ address = mText.mid(start, end - start);
+
+ mPos = end - 1;
+ }
+ return address;
+}
+
+bool KTextToHTMLHelper::atUrl() const
+{
+ // the following characters are allowed in a dot-atom (RFC 2822):
+ // a-z A-Z 0-9 . ! # $ % & ' * + - / = ? ^ _ ` { | } ~
+ static const QString allowedSpecialChars = QStringLiteral(".!#$%&'*+-/=?^_`{|}~");
+
+ // the character directly before the URL must not be a letter, a number or
+ // any other character allowed in a dot-atom (RFC 2822).
+ if ((mPos > 0) &&
+ (mText[mPos - 1].isLetterOrNumber() ||
+ (allowedSpecialChars.indexOf(mText[mPos - 1]) != -1))) {
+ return false;
+ }
+ QChar ch = mText[mPos];
+ return
+ (ch == QLatin1Char('h') && (mText.midRef(mPos, 7) == QLatin1String("http://") ||
+ mText.midRef(mPos, 8) == QLatin1String("https://"))) ||
+ (ch == QLatin1Char('v') && mText.midRef(mPos, 6) == QLatin1String("vnc://")) ||
+ (ch == QLatin1Char('f') && (mText.midRef(mPos, 7) == QLatin1String("fish://") ||
+ mText.midRef(mPos, 6) == QLatin1String("ftp://") ||
+ mText.midRef(mPos, 7) == QLatin1String("ftps://"))) ||
+ (ch == QLatin1Char('s') && (mText.midRef(mPos, 7) == QLatin1String("sftp://") ||
+ mText.midRef(mPos, 6) == QLatin1String("smb://"))) ||
+ (ch == QLatin1Char('m') && mText.midRef(mPos, 7) == QLatin1String("mailto:")) ||
+ (ch == QLatin1Char('w') && mText.midRef(mPos, 4) == QLatin1String("www.")) ||
+ (ch == QLatin1Char('f') && (mText.midRef(mPos, 4) == QLatin1String("ftp.") ||
+ mText.midRef(mPos, 7) == QLatin1String("file://"))) ||
+ (ch == QLatin1Char('n') && mText.midRef(mPos, 5) == QLatin1String("news:"));
+}
+
+bool KTextToHTMLHelper::isEmptyUrl(const QString &url) const
+{
+ return url.isEmpty() ||
+ url == QLatin1String("http://") ||
+ url == QLatin1String("https://") ||
+ url == QLatin1String("fish://") ||
+ url == QLatin1String("ftp://") ||
+ url == QLatin1String("ftps://") ||
+ url == QLatin1String("sftp://") ||
+ url == QLatin1String("smb://") ||
+ url == QLatin1String("vnc://") ||
+ url == QLatin1String("mailto") ||
+ url == QLatin1String("www") ||
+ url == QLatin1String("ftp") ||
+ url == QLatin1String("news") ||
+ url == QLatin1String("news://");
+}
+
+QString KTextToHTMLHelper::getUrl(bool *badurl)
+{
+ QString url;
+ if (atUrl()) {
+ // NOTE: see http://tools.ietf.org/html/rfc3986#appendix-A and especially appendix-C
+ // Appendix-C mainly says, that when extracting URLs from plain text, line breaks shall
+ // be allowed and should be ignored when the URI is extracted.
+
+ // This implementation follows this recommendation and
+ // allows the URL to be enclosed within different kind of brackets/quotes
+ // If an URL is enclosed, whitespace characters are allowed and removed, otherwise
+ // the URL ends with the first whitespace
+ // Also, if the URL is enclosed in brackets, the URL itself is not allowed
+ // to contain the closing bracket, as this would be detected as the end of the URL
+
+ QChar beforeUrl, afterUrl;
+
+ // detect if the url has been surrounded by brackets or quotes
+ if (mPos > 0) {
+ beforeUrl = mText[mPos - 1];
+
+ /*if ( beforeUrl == '(' ) {
+ afterUrl = ')';
+ } else */if (beforeUrl == QLatin1Char('[')) {
+ afterUrl = QLatin1Char(']');
+ } else if (beforeUrl == QLatin1Char('<')) {
+ afterUrl = QLatin1Char('>');
+ } else if (beforeUrl == QLatin1Char('>')) { // for e.g. <link>http://.....</link>
+ afterUrl = QLatin1Char('<');
+ } else if (beforeUrl == QLatin1Char('"')) {
+ afterUrl = QLatin1Char('"');
+ }
+ }
+ url.reserve(mMaxUrlLen); // avoid allocs
+ int start = mPos;
+ bool previousCharIsSpace = false;
+ bool previousCharIsADoubleQuote = false;
+ bool previousIsAnAnchor = false;
+ while ((mPos < mText.length()) &&
+ (mText[mPos].isPrint() || mText[mPos].isSpace()) &&
+ ((afterUrl.isNull() && !mText[mPos].isSpace()) ||
+ (!afterUrl.isNull() && mText[mPos] != afterUrl))) {
+ if (!previousCharIsSpace && (mText[mPos] == QLatin1Char('<')) && ((mPos + 1) < mText.length())) {
+ // Fix Bug #346132: allow "http://www.foo.bar<http://foo.bar/>"
+ // < inside a URL is not allowed, however there is a test which
+ // checks that "http://some<Host>/path" should be allowed
+ // Therefore: check if what follows is another URL and if so, stop here
+ mPos++;
+ if (atUrl()) {
+ mPos--;
+ break;
+ }
+ mPos--;
+ }
+ if (!previousCharIsSpace && (mText[mPos] == QLatin1Char(' ')) && ((mPos + 1) < mText.length())) {
+ // Fix kmail bug: allow "http://www.foo.bar http://foo.bar/"
+ // Therefore: check if what follows is another URL and if so, stop here
+ mPos++;
+ if (atUrl()) {
+ mPos--;
+ break;
+ }
+ mPos--;
+ }
+ if (mText[mPos].isSpace()) {
+ previousCharIsSpace = true;
+ } else if (!previousIsAnAnchor && mText[mPos] == QLatin1Char('[')) {
+ break;
+ } else if (!previousIsAnAnchor && mText[mPos] == QLatin1Char(']')) {
+ break;
+ } else { // skip whitespace
+ if (previousCharIsSpace && mText[mPos] == QLatin1Char('<')) {
+ url.append(QLatin1Char(' '));
+ break;
+ }
+ previousCharIsSpace = false;
+ if (mText[mPos] == QLatin1Char('>') && previousCharIsADoubleQuote) {
+ //it's an invalid url
+ if (badurl) {
+ *badurl = true;
+ }
+ return QString();
+ }
+ if (mText[mPos] == QLatin1Char('"')) {
+ previousCharIsADoubleQuote = true;
+ } else {
+ previousCharIsADoubleQuote = false;
+ }
+ if (mText[mPos] == QLatin1Char('#')) {
+ previousIsAnAnchor = true;
+ }
+ url.append(mText[mPos]);
+ if (url.length() > mMaxUrlLen) {
+ break;
+ }
+ }
+
+ ++mPos;
+ }
+
+ if (isEmptyUrl(url) || (url.length() > mMaxUrlLen)) {
+ mPos = start;
+ url.clear();
+ return url;
+ } else {
+ --mPos;
+ }
+ }
+
+ // HACK: This is actually against the RFC. However, most people don't properly escape the URL in
+ // their text with "" or <>. That leads to people writing an url, followed immediately by
+ // a dot to finish the sentence. That would lead the parser to include the dot in the url,
+ // even though that is not wanted. So work around that here.
+ // Most real-life URLs hopefully don't end with dots or commas.
+ static const QString wordBoundaries = QStringLiteral(".,:!?)>");
+ if (url.length() > 1) {
+ do {
+ if (wordBoundaries.contains(url.at(url.length() - 1))) {
+ url.chop(1);
+ --mPos;
+ } else {
+ break;
+ }
+ } while (url.length() > 1);
+ }
+ return url;
+}
+
+QString KTextToHTMLHelper::highlightedText()
+{
+ // formating symbols must be prepended with a whitespace
+ if ((mPos > 0) && !mText[mPos - 1].isSpace()) {
+ return QString();
+ }
+
+ const QChar ch = mText[mPos];
+ if (ch != QLatin1Char('/') && ch != QLatin1Char('*') && ch != QLatin1Char('_') && ch != QLatin1Char('-')) {
+ return QString();
+ }
+
+ QRegExp re =
+ QRegExp(QStringLiteral("\\%1((\\w+)([\\s-']\\w+)*( ?[,.:\\?!;])?)\\%2").arg(ch).arg(ch));
+ re.setMinimal(true);
+ if (re.indexIn(mText, mPos) == mPos) {
+ int length = re.matchedLength();
+ // there must be a whitespace after the closing formating symbol
+ if (mPos + length < mText.length() && !mText[mPos + length].isSpace()) {
+ return QString();
+ }
+ mPos += length - 1;
+ switch (ch.toLatin1()) {
+ case '*':
+ return QLatin1String("<b>*") + re.cap(1) + QLatin1String("*</b>");
+ case '_':
+ return QLatin1String("<u>_") + re.cap(1) + QLatin1String("_</u>");
+ case '/':
+ return QLatin1String("<i>/") + re.cap(1) + QLatin1String("/</i>");
+ case '-':
+ return QLatin1String("<strike>-") + re.cap(1) + QLatin1String("-</strike>");
+ }
+ }
+ return QString();
+}
+
+
+QString KTextToHTMLHelper::pngToDataUrl(const QString &iconPath) const
+{
+ if (iconPath.isEmpty()) {
+ return QString();
+ }
+
+ QFile pngFile(iconPath);
+ if (!pngFile.open(QIODevice::ReadOnly | QIODevice::Unbuffered)) {
+ return QString();
+ }
+
+ QByteArray ba = pngFile.readAll();
+ pngFile.close();
+ return QStringLiteral("data:image/png;base64,%1").arg(QLatin1String(ba.toBase64().constData()));
+}
+
+
+QString KTextToHTML::convertToHtml(const QString &plainText, const KTextToHTML::Options &flags, int maxUrlLen, int maxAddressLen)
+{
+ KTextToHTMLHelper helper(plainText, maxUrlLen, maxAddressLen);
+
+ QString str;
+ QString result(static_cast<QChar *>(nullptr), helper.mText.length() * 2);
+ QChar ch;
+ int x;
+ bool startOfLine = true;
+
+ for (helper.mPos = 0, x = 0; helper.mPos < helper.mText.length();
+ ++helper.mPos, ++x) {
+ ch = helper.mText[helper.mPos];
+ if (flags & PreserveSpaces) {
+ if (ch == QLatin1Char(' ')) {
+ if (helper.mPos + 1 < helper.mText.length()) {
+ if (helper.mText[helper.mPos + 1] != QLatin1Char(' ')) {
+
+ // A single space, make it breaking if not at the start or end of the line
+ const bool endOfLine = helper.mText[helper.mPos + 1] == QLatin1Char('\n');
+ if (!startOfLine && !endOfLine) {
+ result += QLatin1Char(' ');
+ } else {
+ result += QLatin1String(" ");
+ }
+ } else {
+
+ // Whitespace of more than one space, make it all non-breaking
+ while (helper.mPos < helper.mText.length() && helper.mText[helper.mPos] == QLatin1Char(' ')) {
+ result += QLatin1String(" ");
+ ++helper.mPos;
+ ++x;
+ }
+
+ // We incremented once to often, undo that
+ --helper.mPos;
+ --x;
+ }
+ } else {
+ // Last space in the text, it is non-breaking
+ result += QLatin1String(" ");
+ }
+
+ if (startOfLine) {
+ startOfLine = false;
+ }
+ continue;
+ } else if (ch == QLatin1Char('\t')) {
+ do {
+ result += QLatin1String(" ");
+ ++x;
+ } while ((x & 7) != 0);
+ --x;
+ startOfLine = false;
+ continue;
+ }
+ }
+ if (ch == QLatin1Char('\n')) {
+ result += QLatin1String("<br />\n"); // Keep the \n, so apps can figure out the quoting levels correctly.
+ startOfLine = true;
+ x = -1;
+ continue;
+ }
+
+ startOfLine = false;
+ if (ch == QLatin1Char('&')) {
+ result += QLatin1String("&");
+ } else if (ch == QLatin1Char('"')) {
+ result += QLatin1String(""");
+ } else if (ch == QLatin1Char('<')) {
+ result += QLatin1String("<");
+ } else if (ch == QLatin1Char('>')) {
+ result += QLatin1String(">");
+ } else {
+ const int start = helper.mPos;
+ if (!(flags & IgnoreUrls)) {
+ bool badUrl = false;
+ str = helper.getUrl(&badUrl);
+ if (badUrl) {
+ QString resultBadUrl;
+ const int helperTextSize(helper.mText.count());
+ for (int i = 0; i < helperTextSize; ++i) {
+ const QChar chBadUrl = helper.mText[i];
+ if (chBadUrl == QLatin1Char('&')) {
+ resultBadUrl += QLatin1String("&");
+ } else if (chBadUrl == QLatin1Char('"')) {
+ resultBadUrl += QLatin1String(""");
+ } else if (chBadUrl == QLatin1Char('<')) {
+ resultBadUrl += QLatin1String("<");
+ } else if (chBadUrl == QLatin1Char('>')) {
+ resultBadUrl += QLatin1String(">");
+ } else {
+ resultBadUrl += chBadUrl;
+ }
+ }
+ return resultBadUrl;
+ }
+ if (!str.isEmpty()) {
+ QString hyperlink;
+ if (str.left(4) == QLatin1String("www.")) {
+ hyperlink = QLatin1String("http://") + str;
+ } else if (str.left(4) == QLatin1String("ftp.")) {
+ hyperlink = QLatin1String("ftp://") + str;
+ } else {
+ hyperlink = str;
+ }
+ result += QLatin1String("<a href=\"") + hyperlink + QLatin1String("\">") + str.toHtmlEscaped() + QLatin1String("</a>");
+ x += helper.mPos - start;
+ continue;
+ }
+ str = helper.getEmailAddress();
+ if (!str.isEmpty()) {
+ // len is the length of the local part
+ int len = str.indexOf(QLatin1Char('@'));
+ QString localPart = str.left(len);
+
+ // remove the local part from the result (as '&'s have been expanded to
+ // & we have to take care of the 4 additional characters per '&')
+ result.truncate(result.length() -
+ len - (localPart.count(QLatin1Char('&')) * 4));
+ x -= len;
+
+ result += QLatin1String("<a href=\"mailto:") + str + QLatin1String("\">") + str + QLatin1String("</a>");
+ x += str.length() - 1;
+ continue;
+ }
+ }
+ if (flags & HighlightText) {
+ str = helper.highlightedText();
+ if (!str.isEmpty()) {
+ result += str;
+ x += helper.mPos - start;
+ continue;
+ }
+ }
+ result += ch;
+ }
+ }
+
+ if (flags & ReplaceSmileys) {
+ const QStringList exclude = { QStringLiteral("(c)"), QStringLiteral("(C)"), QStringLiteral(">:-("), QStringLiteral(">:("), QStringLiteral("(B)"), QStringLiteral("(b)"), QStringLiteral("(P)"), QStringLiteral("(p)")
+ , QStringLiteral("(O)"), QStringLiteral("(o)"), QStringLiteral("(D)"), QStringLiteral("(d)"), QStringLiteral("(E)"), QStringLiteral("(e)"), QStringLiteral("(K)"), QStringLiteral("(k)")
+ , QStringLiteral("(I)"), QStringLiteral("(i)"), QStringLiteral("(L)"), QStringLiteral("(l)"), QStringLiteral("(8)"), QStringLiteral("(T)"), QStringLiteral("(t)"), QStringLiteral("(G)")
+ , QStringLiteral("(g)"), QStringLiteral("(F)"), QStringLiteral("(f)"), QStringLiteral("(H)")
+ , QStringLiteral("8)"), QStringLiteral("(N)"), QStringLiteral("(n)"), QStringLiteral("(Y)"), QStringLiteral("(y)"), QStringLiteral("(U)"), QStringLiteral("(u)"), QStringLiteral("(W)"), QStringLiteral("(w)")
+ , QStringLiteral("(6)")};
+
+ result = helper.emoticonsInterface()->parseEmoticons(result, true, exclude);
+ }
+
+ return result;
+}
--- /dev/null
+/*
+ Copyright (c) 2002 Dave Corrie <kde@davecorrie.com>
+ Copyright (c) 2014 Daniel Vrátil <dvratil@redhat.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef KCOREADDONS_KTEXTTOHTML_H
+#define KCOREADDONS_KTEXTTOHTML_H
+
+#include <kcoreaddons_export.h>
+
+#include <QString>
+#include <QFlag>
+
+/**
+ * @author Dave Corrie \<kde@davecorrie.com\>
+ */
+namespace KTextToHTML
+{
+
+/**
+ * @since 5.5.0
+ */
+enum Option
+{
+ /**
+ * Preserve white-space formatting of the text
+ */
+ PreserveSpaces = 1 << 1,
+
+ /**
+ * Replace text emoticons smileys by emoticons images.
+ *
+ * @note
+ * This option works only when KEmoticons framework is available at runtime,
+ * and requires QGuiApplication, otherwise the flag is simply ignored.
+ */
+ ReplaceSmileys = 1 << 2,
+
+ /**
+ * Don't parse and replace any URLs.
+ */
+ IgnoreUrls = 1 << 3,
+
+ /**
+ * Interpret text highlighting markup, like *bold*, _underline_ and /italic/,
+ * and wrap them in corresponding HTML entities.
+ */
+ HighlightText = 1 << 4
+};
+Q_DECLARE_FLAGS(Options, Option)
+
+/**
+ * Converts plaintext into html. The following characters are converted
+ * to HTML entities: & " < >. Newlines are also preserved.
+ *
+ * @param plainText The text to be converted into HTML.
+ * @param options The options to use when processing @p plainText.
+ * @param maxUrlLen The maximum length of permitted URLs. The reason for
+ * this limit is that there may be possible security
+ * implications in handling URLs of unlimited length.
+ * @param maxAddressLen The maximum length of permitted email addresses.
+ * The reason for this limit is that there may be possible
+ * security implications in handling addresses of unlimited
+ * length.
+ *
+ * @return An HTML version of the text supplied in the 'plainText'
+ * parameter, suitable for inclusion in the BODY of an HTML document.
+ *
+ * @since 5.5.0
+ */
+KCOREADDONS_EXPORT QString convertToHtml(const QString &plainText,
+ const KTextToHTML::Options &options,
+ int maxUrlLen = 4096,
+ int maxAddressLen = 255);
+
+}
+
+Q_DECLARE_OPERATORS_FOR_FLAGS(KTextToHTML::Options)
+
+#endif
--- /dev/null
+/*
+ Copyright (c) 2002 Dave Corrie <kde@davecorrie.com>
+ Copyright (c) 2014 Daniel Vrátil <dvratil@redhat.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef KTEXTTOHTML_P_H
+#define KTEXTTOHTML_P_H
+
+#include <QObject>
+
+#include "kcoreaddons_export.h"
+#include "ktexttohtmlemoticonsinterface.h"
+
+class KTextToHTMLEmoticonsDummy : public KTextToHTMLEmoticonsInterface
+{
+public:
+ QString parseEmoticons(const QString &text,
+ bool strictParse = false,
+ const QStringList &exclude = QStringList()) override
+ {
+ Q_UNUSED(strictParse);
+ Q_UNUSED(exclude);
+ return text;
+ }
+};
+
+class KTextToHTMLHelper
+{
+public:
+ KTextToHTMLHelper(const QString &plainText, int pos = 0, int maxUrlLen = 4096, int maxAddressLen = 255);
+
+ KTextToHTMLEmoticonsInterface *emoticonsInterface() const;
+
+ QString getEmailAddress();
+ bool atUrl() const;
+ bool isEmptyUrl(const QString &url) const;
+ QString getUrl(bool *badurl = nullptr);
+ QString pngToDataUrl(const QString &pngPath) const;
+ QString highlightedText();
+
+ QString mText;
+ int mMaxUrlLen;
+ int mMaxAddressLen;
+ int mPos;
+};
+
+#endif
--- /dev/null
+/*
+ Copyright (c) 2014 Daniel Vrátil <dvratil@redhat.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef KTEXTTOHTMLEMOTICONSINTERFACE_H
+#define KTEXTTOHTMLEMOTICONSINTERFACE_H
+
+#include <QStringList>
+#include <QMetaType>
+
+/**
+ * @internal
+ * Used internally by KTextToHTML, implemented by plugin, for dynamic dependency on KEmoticons
+ */
+class KTextToHTMLEmoticonsInterface
+{
+public:
+ KTextToHTMLEmoticonsInterface() {}
+ virtual ~KTextToHTMLEmoticonsInterface() {} // KF6 TODO: de-inline (-Wweak-vtables)
+
+ virtual QString parseEmoticons(const QString &text,
+ bool strictParse = false,
+ const QStringList &exclude = QStringList()) = 0;
+
+};
+
+Q_DECLARE_METATYPE(KTextToHTMLEmoticonsInterface *)
+
+#define KTEXTTOHTMLEMOTICONS_PROPERTY "KTextToHTMLEmoticons"
+
+#endif
--- /dev/null
+#define ACCOUNTS_SERVICE_ICON_DIR "${ACCOUNTS_SERVICE_ICON_DIR}"
--- /dev/null
+#cmakedefine01 HAVE_GETGROUPLIST
--- /dev/null
+
+#define KDE4_DEFAULT_HOME "${KDE4_DEFAULT_HOME}"
--- /dev/null
+/* This file is part of the KDE Frameworks
+
+ Copyright 2014 Montel Laurent <montel@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include "kdelibs4configmigrator.h"
+
+#include <QStandardPaths>
+#include <Kdelibs4Migration>
+#include <QFile>
+#include <QFileInfo>
+#include <QDir>
+#include <QLoggingCategory>
+#include <QPluginLoader>
+
+Q_DECLARE_LOGGING_CATEGORY(MIGRATOR)
+// logging category for this framework, default: log stuff >= warning
+Q_LOGGING_CATEGORY(MIGRATOR, "kf5.kcoreaddons.kdelibs4configmigrator", QtWarningMsg)
+
+class Q_DECL_HIDDEN Kdelibs4ConfigMigrator::Private
+{
+public:
+ Private(const QString &_appName)
+ : appName(_appName)
+ {
+
+ }
+
+ QStringList configFiles;
+ QStringList uiFiles;
+ QString appName;
+};
+
+Kdelibs4ConfigMigrator::Kdelibs4ConfigMigrator(const QString &appName)
+ : d(new Private(appName))
+{
+}
+
+Kdelibs4ConfigMigrator::~Kdelibs4ConfigMigrator()
+{
+ delete d;
+}
+
+void Kdelibs4ConfigMigrator::setConfigFiles(const QStringList &configFileNameList)
+{
+ d->configFiles = configFileNameList;
+}
+
+void Kdelibs4ConfigMigrator::setUiFiles(const QStringList &uiFileNameList)
+{
+ d->uiFiles = uiFileNameList;
+}
+
+bool Kdelibs4ConfigMigrator::migrate()
+{
+ // Testing for kdehome
+ Kdelibs4Migration migration;
+ if (!migration.kdeHomeFound()) {
+ return false;
+ }
+
+ bool didSomething = false;
+
+ Q_FOREACH (const QString &configFileName, d->configFiles) {
+ const QString newConfigLocation
+ = QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation)
+ + QLatin1Char('/') + configFileName;
+
+ if (QFile(newConfigLocation).exists()) {
+ continue;
+ }
+ //Be safe
+ QFileInfo fileInfo(newConfigLocation);
+ QDir().mkpath(fileInfo.absolutePath());
+
+ const QString oldConfigFile(migration.locateLocal("config", configFileName));
+ if (!oldConfigFile.isEmpty()) {
+ if (QFile(oldConfigFile).copy(newConfigLocation)) {
+ didSomething = true;
+ qCDebug(MIGRATOR) << "config file" << oldConfigFile << "was migrated to" << newConfigLocation;
+ }
+ }
+ }
+
+ if (d->appName.isEmpty() && !d->uiFiles.isEmpty()) {
+ qCritical() << " We can not migrate ui file. AppName is missing";
+ } else {
+ Q_FOREACH (const QString &uiFileName, d->uiFiles) {
+ const QString newConfigLocation
+ = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) +
+ QStringLiteral("/kxmlgui5/") + d->appName + QLatin1Char('/') + uiFileName;
+ if (QFile(newConfigLocation).exists()) {
+ continue;
+ }
+ QFileInfo fileInfo(newConfigLocation);
+ QDir().mkpath(fileInfo.absolutePath());
+
+ const QString oldConfigFile(migration.locateLocal("data", d->appName + QLatin1Char('/') + uiFileName));
+ if (!oldConfigFile.isEmpty()) {
+ if (QFile(oldConfigFile).copy(newConfigLocation)) {
+ didSomething = true;
+ qCDebug(MIGRATOR) << "ui file" << oldConfigFile << "was migrated to" << newConfigLocation;
+ }
+ }
+ }
+ }
+
+ // Trigger KSharedConfig::openConfig()->reparseConfiguration() via the framework integration plugin
+ if (didSomething) {
+ QPluginLoader lib(QStringLiteral("kf5/FrameworkIntegrationPlugin"));
+ QObject *rootObj = lib.instance();
+ if (rootObj) {
+ QMetaObject::invokeMethod(rootObj, "reparseConfiguration");
+ }
+ }
+
+ return true;
+}
--- /dev/null
+/* This file is part of the KDE Frameworks
+
+ Copyright 2014 Montel Laurent <montel@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef KDELIBS4CONFIGMIGRATOR_H
+#define KDELIBS4CONFIGMIGRATOR_H
+
+#include <kcoreaddons_export.h>
+#include <QStringList>
+
+/**
+ * @class Kdelibs4ConfigMigrator kdelibs4configmigrator.h Kdelibs4ConfigMigrator
+ *
+ * Kdelibs4ConfigMigrator migrates selected config files and ui files
+ * from the kdelibs 4.x location ($KDEHOME, as used by KStandardDirs)
+ * to the Qt 5.x location ($XDG_*_HOME, as used by QStandardPaths).
+ *
+ * @short Class for migration of config files and ui file from kdelibs4.
+ * @since 5.2
+ */
+class KCOREADDONS_EXPORT Kdelibs4ConfigMigrator
+{
+public:
+ /**
+ * Constructs a Kdelibs4ConfigMigrator
+ *
+ * @param appName The application name, which is used for the directory
+ * containing the .ui files.
+ */
+ explicit Kdelibs4ConfigMigrator(const QString &appName);
+
+ /**
+ * Destructor
+ */
+ ~Kdelibs4ConfigMigrator();
+
+ /**
+ * Migrate the files, if any.
+ *
+ * Returns true if the migration happened.
+ * It will return false if there was nothing to migrate (no KDEHOME).
+ * This return value is unrelated to error handling. It is just a way to skip anything else
+ * related to migration on a clean system, by writing
+ * @code
+ * if (migrate()) {
+ * look for old data to migrate as well
+ * }
+ * @endcode
+ */
+ bool migrate();
+
+ /**
+ * Set the list of config files that need to be migrated.
+ * @param configFileNameList list of config files
+ */
+ void setConfigFiles(const QStringList &configFileNameList);
+
+ /**
+ * Set the list of ui files to migrate.
+ * @param uiFileNameList list of ui files
+ */
+ void setUiFiles(const QStringList &uiFileNameList);
+
+private:
+ class Private;
+ friend class Private;
+ Private *const d;
+};
+
+#endif // KDELIBS4CONFIGMIGRATOR_H
--- /dev/null
+/* This file is part of the KDE Frameworks
+
+ Copyright 2014 David Faure <faure@kde.org>
+ Copyright 2014 Ivan Cukic <ivan.cukic(at)kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include "kdelibs4migration.h"
+#include "config-kde4home.h"
+#include <QDir>
+#include "kcoreaddons_debug.h"
+#include <QVector>
+
+#ifdef Q_OS_WIN
+# include <shlobj.h>
+#endif
+
+class Kdelibs4MigrationPrivate
+{
+public:
+ QString m_kdeHome;
+};
+
+Kdelibs4Migration::Kdelibs4Migration()
+ : d(new Kdelibs4MigrationPrivate)
+{
+ if (qEnvironmentVariableIsSet("KDEHOME")) {
+ //qCDebug(KCOREADDONS_DEBUG) << "Using KDEHOME as the location of the old config file";
+ d->m_kdeHome = QString::fromLocal8Bit(qgetenv("KDEHOME"));
+ } else {
+ QDir homeDir = QDir::home();
+ QVector<QString> testSubdirs;
+ testSubdirs << QStringLiteral(KDE4_DEFAULT_HOME) << QStringLiteral(".kde4") << QStringLiteral(".kde");
+#ifdef Q_OS_WIN
+ WCHAR wPath[MAX_PATH + 1];
+ if (SHGetFolderPathW(NULL, CSIDL_APPDATA, NULL, SHGFP_TYPE_CURRENT, wPath) == S_OK) {
+ testSubdirs << QDir::fromNativeSeparators(QString::fromUtf16((const ushort *) wPath)) +
+ QLatin1String("/" KDE4_DEFAULT_HOME);
+ }
+#endif
+ Q_FOREACH (const QString &testSubdir, testSubdirs) {
+ if (homeDir.exists(testSubdir)) {
+ //qCDebug(KCOREADDONS_DEBUG) << "Using" << testSubdir << "as the location of the old config file";
+ d->m_kdeHome = homeDir.filePath(testSubdir);
+ break;
+ }
+ }
+ if (d->m_kdeHome.isEmpty()) {
+ d->m_kdeHome = homeDir.filePath(QStringLiteral(KDE4_DEFAULT_HOME));
+ }
+ }
+
+ if (!d->m_kdeHome.isEmpty() && !d->m_kdeHome.endsWith(QLatin1Char('/'))) {
+ d->m_kdeHome.append(QLatin1Char('/'));
+ }
+}
+
+Kdelibs4Migration::~Kdelibs4Migration()
+{
+ delete d;
+}
+
+bool Kdelibs4Migration::kdeHomeFound() const
+{
+ return !d->m_kdeHome.isEmpty() && QDir(d->m_kdeHome).exists();
+}
+
+QString Kdelibs4Migration::kdeHome() const
+{
+ return d->m_kdeHome;
+}
+
+QString Kdelibs4Migration::locateLocal(const char *type, const QString &filename) const
+{
+ if (d->m_kdeHome.isEmpty()) {
+ return QString();
+ }
+ const QString dir = saveLocation(type);
+ if (dir.isEmpty()) {
+ return QString();
+ }
+ const QString file = dir + filename;
+ if (QFile::exists(file)) {
+ return file;
+ }
+ return QString();
+}
+
+static const struct {
+ const char *type;
+ const char *subdir;
+} s_subdirs[] = {
+ { "config", "share/config/" },
+ { "data", "share/apps/" },
+ { "services", "share/kde4/services" },
+ { "servicetypes", "share/kde4/servicetypes" },
+ { "wallpaper", "share/wallpapers" },
+ { "emoticons", "share/emoticons" },
+ { "templates", "share/templates" }
+};
+
+QString Kdelibs4Migration::saveLocation(const char *type, const QString &suffix) const
+{
+ if (d->m_kdeHome.isEmpty()) {
+ return QString();
+ }
+ static const int numResources = sizeof(s_subdirs) / sizeof(*s_subdirs);
+ for (uint i = 0; i < numResources; ++i) {
+ if (qstrcmp(s_subdirs[i].type, type) == 0) {
+ QString dir = d->m_kdeHome + QString::fromLatin1(s_subdirs[i].subdir) + suffix;
+ if (!dir.endsWith(QLatin1Char('/'))) {
+ dir += QLatin1Char('/');
+ }
+ return dir;
+ }
+ }
+ qCWarning(KCOREADDONS_DEBUG) << "No such resource" << type;
+ return QString();
+}
+
--- /dev/null
+/* This file is part of the KDE Frameworks
+
+ Copyright 2014 David Faure <faure@kde.org>
+ Copyright 2014 Ivan Cukic <ivan.cukic(at)kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef KDELIBS4MIGRATION_H
+#define KDELIBS4MIGRATION_H
+
+#include <kcoreaddons_export.h>
+
+#include <QString>
+
+class Kdelibs4MigrationPrivate;
+
+/**
+ * \file kdelibs4migration.h
+ */
+
+/**
+ * @class Kdelibs4Migration kdelibs4migration.h Kdelibs4Migration
+ *
+ * Kdelibs4Migration provides support for locating config files
+ * and application data files saved by kdelibs 4 in the user's home directory
+ * ($KDEHOME, i.e. typically ~/.kde).
+ *
+ * Distributions that built kdelibs4 with a custom KDE home with
+ * the CMake option _KDE_DEFAULT_HOME_POSTFIX should use the same option
+ * here with _KDE4_DEFAULT_HOME_POSTFIX
+ *
+ * The purpose is to be able to let the application migrate these files
+ * to the KF5/Qt5 location for these files (QStandardPaths).
+ *
+ * Files from the "config" resource (as saved by KConfig) should be migrated to
+ * QStandardPaths::writableLocation(QStandardPaths::ConfigLocation)
+ *
+ * Files from the "data" resource should be migrated to a subdirectory of
+ * QStandardPaths::writableLocation(QStandardPaths::DataLocation)
+ *
+ * The following resources are supported:
+ <ul>
+ <li>config</li>
+ <li>data</li>
+ <li>services</li>
+ <li>servicetypes</li>
+ <li>wallpaper</li>
+ <li>emoticons</li>
+ <li>templates</li>
+ </ul>
+ * Use kdeHome() for anything else.
+ *
+ * @short Class for migration of config files from kdelibs4
+ * @since 5.0
+ */
+class KCOREADDONS_EXPORT Kdelibs4Migration Q_DECL_FINAL
+{
+public:
+ /**
+ * Constructs a Kdelibs4Migration instance.
+ * The constructor attempts to locate the user's "kdehome" from kdelibs4.
+ */
+ explicit Kdelibs4Migration();
+
+ /**
+ * Destructor
+ */
+ ~Kdelibs4Migration();
+
+ /**
+ * Returns true if a "kdehome" was found.
+ * Otherwise, there is nothing to migrate.
+ */
+ bool kdeHomeFound() const;
+
+ /**
+ * Returns the kdehome that was found.
+ * Don't use this method if you can use locateLocal or saveLocation
+ * @since 5.13
+ */
+ QString kdeHome() const;
+
+ /**
+ * Finds a local file in a resource.
+ * This API is inspired by KStandardDirs::locateLocal for ease of porting.
+ * @param type The type of wanted resource.
+ * @param filename A relative filename of the resource.
+ */
+ QString locateLocal(const char *type, const QString &filename) const;
+
+ /**
+ * Finds a location to save files into for the given type
+ * in the user's home directory.
+ * @param type The type of location to return.
+ * @param suffix A subdirectory name.
+ */
+ QString saveLocation(const char *type, const QString &suffix = QString()) const;
+
+private:
+ Kdelibs4MigrationPrivate *d;
+};
+
+#endif // KFORMAT_H
--- /dev/null
+/* This file is part of the KDE Frameworks
+
+ Copyright (C) 2013 Alex Merry <alex.merry@kdemail.net>
+ Copyright (C) 2013 John Layt <jlayt@kde.org>
+ Copyright (C) 2010 Michael Leupold <lemma@confuego.org>
+ Copyright (C) 2009 Michael Pyne <mpyne@kde.org>
+ Copyright (C) 2008 Albert Astals Cid <aacid@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include "kformatprivate_p.h"
+
+KFormat::KFormat(const QLocale &locale)
+ : d(new KFormatPrivate(locale))
+{
+}
+
+KFormat::KFormat(const KFormat &other)
+ : d(other.d)
+{
+}
+
+KFormat& KFormat::operator=(const KFormat &other)
+{
+ d = other.d;
+ return *this;
+}
+
+KFormat::~KFormat()
+{
+}
+
+QString KFormat::formatByteSize(double size,
+ int precision,
+ KFormat::BinaryUnitDialect dialect,
+ KFormat::BinarySizeUnits units) const
+{
+ return d->formatByteSize(size, precision, dialect, units);
+}
+
+QString KFormat::formatValue(double value,
+ KFormat::Unit unit,
+ int precision,
+ KFormat::UnitPrefix prefix,
+ KFormat::BinaryUnitDialect dialect) const
+{
+ return d->formatValue(value, unit, QString(), precision, prefix, dialect);
+}
+
+QString KFormat::formatValue(double value,
+ const QString& unit,
+ int precision,
+ KFormat::UnitPrefix prefix) const
+{
+ return d->formatValue(value, KFormat::Unit::Other, unit, precision, prefix, MetricBinaryDialect);
+}
+
+QString KFormat::formatDuration(quint64 msecs,
+ KFormat::DurationFormatOptions options) const
+{
+ return d->formatDuration(msecs, options);
+}
+
+QString KFormat::formatDecimalDuration(quint64 msecs,
+ int decimalPlaces) const
+{
+ return d->formatDecimalDuration(msecs, decimalPlaces);
+}
+
+QString KFormat::formatSpelloutDuration(quint64 msecs) const
+{
+ return d->formatSpelloutDuration(msecs);
+}
+
+QString KFormat::formatRelativeDate(const QDate &date,
+ QLocale::FormatType format) const
+{
+ return d->formatRelativeDate(date, format);
+}
+
+QString KFormat::formatRelativeDateTime(const QDateTime &dateTime,
+ QLocale::FormatType format) const
+{
+ return d->formatRelativeDateTime(dateTime, format);
+}
+
+#include "moc_kformat.cpp"
--- /dev/null
+/* This file is part of the KDE Frameworks
+
+ Copyright (C) 2013 Alex Merry <alex.merry@kdemail.net>
+ Copyright (C) 2013 John Layt <jlayt@kde.org>
+ Copyright (C) 2010 Michael Leupold <lemma@confuego.org>
+ Copyright (C) 2009 Michael Pyne <mpyne@kde.org>
+ Copyright (C) 2008 Albert Astals Cid <aacid@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef KFORMAT_H
+#define KFORMAT_H
+
+#include <kcoreaddons_export.h>
+
+#include <QString>
+#include <QLocale>
+#include <QSharedPointer>
+
+class QDate;
+class QDateTime;
+
+class KFormatPrivate;
+
+/**
+ * \file kformat.h
+ */
+
+/*
+ The code in this class was copied from the old KLocale and modified
+ by John Layt (and also Alex Merry) in the KDELIBS 4 to KDE
+ Frameworks 5 transition in 2013.
+
+ Albert Astals Cid is the original author of formatSpelloutDuration()
+ originally named KLocale::prettyFormatDuration().
+
+ Michael Pyne is the original author of formatByteSize().
+
+ Michael Leupold is the original author of formatRelativeDate(()
+ originally part of KFormat::formatDate().
+*/
+
+/**
+ * @class KFormat kformat.h KFormat
+ *
+ * KFormat provides support for formatting numbers and datetimes in
+ * formats that are not supported by QLocale.
+ *
+ * @author John Layt <jlayt@kde.org>,
+ * Michael Pyne <mpyne@kde.org>,
+ * Albert Astals Cid <aacid@kde.org>,
+ *
+ * @short Class for formatting numbers and datetimes.
+ * @since 5.0
+ */
+class KCOREADDONS_EXPORT KFormat Q_DECL_FINAL
+{
+ Q_GADGET
+
+public:
+ /**
+ * These binary units are used in KDE by the formatByteSize()
+ * function.
+ *
+ * NOTE: There are several different units standards:
+ * 1) SI (i.e. metric), powers-of-10.
+ * 2) IEC, powers-of-2, with specific units KiB, MiB, etc.
+ * 3) JEDEC, powers-of-2, used for solid state memory sizing which
+ * is why you see flash cards labels as e.g. 4GB. These (ab)use
+ * the metric units. Although JEDEC only defines KB, MB, GB, if
+ * JEDEC is selected all units will be powers-of-2 with metric
+ * prefixes for clarity in the event of sizes larger than 1024 GB.
+ *
+ * Although 3 different dialects are possible this enum only uses
+ * metric names since adding all 3 different names of essentially the same
+ * unit would be pointless. Use BinaryUnitDialect to control the exact
+ * units returned.
+ *
+ * @see BinaryUnitDialect
+ * @see formatByteSize
+ */
+ enum BinarySizeUnits {
+ /// Auto-choose a unit such that the result is in the range [0, 1000 or 1024)
+ DefaultBinaryUnits = -1,
+
+ // The first real unit must be 0 for the current implementation!
+ UnitByte, ///< B 1 byte
+ UnitKiloByte, ///< KiB/KB/kB 1024/1000 bytes.
+ UnitMegaByte, ///< MiB/MB/MB 2^20/10^06 bytes.
+ UnitGigaByte, ///< GiB/GB/GB 2^30/10^09 bytes.
+ UnitTeraByte, ///< TiB/TB/TB 2^40/10^12 bytes.
+ UnitPetaByte, ///< PiB/PB/PB 2^50/10^15 bytes.
+ UnitExaByte, ///< EiB/EB/EB 2^60/10^18 bytes.
+ UnitZettaByte, ///< ZiB/ZB/ZB 2^70/10^21 bytes.
+ UnitYottaByte, ///< YiB/YB/YB 2^80/10^24 bytes.
+ UnitLastUnit = UnitYottaByte
+ };
+
+ /**
+ * These units are used in KDE by the formatValue() function.
+ *
+ * @see formatValue
+ * @since 5.49
+ */
+ enum class Unit {
+ Other,
+ Bit, ///< "bit"
+ Byte, ///< "B"
+ Meter, ///< "m"
+ Hertz, ///< "Hz"
+ };
+
+ /**
+ * These prefixes are used in KDE by the formatValue()
+ * function.
+ *
+ * IEC prefixes are only defined for integral units of information, e.g.
+ * bits and bytes.
+ *
+ * @see BinarySizeUnits
+ * @see formatValue
+ * @since 5.49
+ */
+ enum class UnitPrefix {
+ /// Auto-choose a unit such that the result is in the range [0, 1000 or 1024)
+ AutoAdjust = -128,
+
+ Yocto = 0, ///< --/-/y 10^-24
+ Zepto, ///< --/-/z 10^-21
+ Atto, ///< --/-/a 10^-18
+ Femto, ///< --/-/f 10^-15
+ Pico, ///< --/-/p 10^-12
+ Nano, ///< --/-/n 10^-9
+ Micro, ///< --/-/µ 10^-6
+ Milli, ///< --/-/m 10^-3
+ Centi, ///< --/-/c 0.01
+ Deci, ///< --/-/d 0.1
+ Unity, ///< "" 1
+ Deca, ///< --/-/da 10
+ Hecto, ///< --/-/h 100
+ Kilo, ///< Ki/K/k 1024/1000
+ Mega, ///< Mi/M/M 2^20/10^06
+ Giga, ///< Gi/G/G 2^30/10^09
+ Tera, ///< Ti/T/T 2^40/10^12
+ Peta, ///< Pi/P/P 2^50/10^15
+ Exa, ///< Ei/E/E 2^60/10^18
+ Zetta, ///< Zi/Z/Z 2^70/10^21
+ Yotta, ///< Yi/Y/Y 2^80/10^24
+ };
+
+ /**
+ * This enum chooses what dialect is used for binary units.
+ *
+ * Note: Although JEDEC abuses the metric prefixes and can therefore be
+ * confusing, it has been used to describe *memory* sizes for quite some time
+ * and programs should therefore use either Default, JEDEC, or IEC 60027-2
+ * for memory sizes.
+ *
+ * On the other hand network transmission rates are typically in metric so
+ * Default, Metric, or IEC (which is unambiguous) should be chosen.
+ *
+ * Normally choosing DefaultBinaryDialect is the best option as that uses
+ * the user's selection for units. If the user has not selected a preference,
+ * IECBinaryDialect will typically be used.
+ *
+ * @see BinarySizeUnits
+ * @see formatByteSize
+ */
+ enum BinaryUnitDialect {
+ DefaultBinaryDialect = -1, ///< Used if no specific preference
+ IECBinaryDialect, ///< KiB, MiB, etc. 2^(10*n)
+ JEDECBinaryDialect, ///< KB, MB, etc. 2^(10*n)
+ MetricBinaryDialect, ///< SI Units, kB, MB, etc. 10^(3*n)
+ LastBinaryDialect = MetricBinaryDialect
+ };
+
+ /**
+ * Format flags for formatDuration()
+ */
+ enum DurationFormatOption {
+ DefaultDuration = 0x0, ///< Default formatting in localized 1:23:45 format
+ InitialDuration = 0x1, ///< Default formatting in localized 1h23m45s format
+ ShowMilliseconds = 0x2, ///< Include milliseconds in format, e.g. 1:23:45.678
+ HideSeconds = 0x4, ///< Hide the seconds, e.g. 1:23 or 1h23m, overrides ShowMilliseconds
+ FoldHours = 0x8 ///< Fold the hours into the minutes, e.g. 83:45 or 83m45s, overrides HideSeconds
+ };
+ Q_DECLARE_FLAGS(DurationFormatOptions, DurationFormatOption)
+ Q_FLAG(DurationFormatOption)
+
+ /**
+ * Constructs a KFormat.
+ *
+ * @param locale the locale to use, defaults to the system locale
+ */
+ explicit KFormat(const QLocale &locale = QLocale());
+
+ /**
+ * Copy constructor
+ */
+ KFormat(const KFormat &other);
+
+ KFormat& operator=(const KFormat &other);
+
+ /**
+ * Destructor
+ */
+ ~KFormat();
+
+ /**
+ * Converts @p size from bytes to the appropriate string representation
+ * using the binary unit dialect @p dialect and the specific units @p units.
+ *
+ * Example:
+ * @code
+ * QString metric, iec, jedec, small;
+ * metric = formatByteSize(1000, 1, KFormat::MetricBinaryDialect, KFormat::UnitKiloByte);
+ * iec = formatByteSize(1000, 1, KFormat::IECBinaryDialect, KFormat::UnitKiloByte);
+ * jedec = formatByteSize(1000, 1, KFormat::JEDECBinaryDialect, KFormat::UnitKiloByte);
+ * small = formatByteSize(100);
+ * // metric == "1.0 kB", iec == "1.0 KiB", jedec == "1.0 KB", small == "100 B"
+ * @endcode
+ *
+ * @param size size in bytes
+ * @param precision number of places after the decimal point to use. KDE uses
+ * 1 by default so when in doubt use 1. Whenever KFormat::UnitByte is used
+ * (either explicitly or autoselected from KFormat::DefaultBinaryUnits),
+ * the fractional part is always omitted.
+ * @param dialect binary unit standard to use. Use DefaultBinaryDialect to
+ * use the localized user selection unless you need to use a specific
+ * unit type (such as displaying a flash memory size in JEDEC).
+ * @param units specific unit size to use in result. Use
+ * DefaultBinaryUnits to automatically select a unit that will return
+ * a sanely-sized number.
+ * @return converted size as a translated string including the units.
+ * E.g. "1.23 KiB", "2 GB" (JEDEC), "4.2 kB" (Metric).
+ * @see BinarySizeUnits
+ * @see BinaryUnitDialect
+ */
+
+ QString formatByteSize(double size,
+ int precision = 1,
+ KFormat::BinaryUnitDialect dialect = KFormat::DefaultBinaryDialect,
+ KFormat::BinarySizeUnits units = KFormat::DefaultBinaryUnits) const;
+
+ /**
+ * Given a number of milliseconds, converts that to a string containing
+ * the localized equivalent, e.g. 1:23:45
+ *
+ * @param msecs Time duration in milliseconds
+ * @param options options to use in the duration format
+ * @return converted duration as a string - e.g. "1:23:45" "1h23m"
+ */
+
+ QString formatDuration(quint64 msecs,
+ KFormat::DurationFormatOptions options = KFormat::DefaultDuration) const;
+
+ /**
+ * Given a number of milliseconds, converts that to a string containing
+ * the localized equivalent to the requested decimal places.
+ *
+ * e.g. given formatDuration(60000), returns "1.0 minutes"
+ *
+ * @param msecs Time duration in milliseconds
+ * @param decimalPlaces Decimal places to round off to, defaults to 2
+ * @return converted duration as a string - e.g. "5.5 seconds" "23.0 minutes"
+ */
+
+ QString formatDecimalDuration(quint64 msecs,
+ int decimalPlaces = 2) const;
+
+ /**
+ * Given a number of milliseconds, converts that to a spell-out string containing
+ * the localized equivalent.
+ *
+ * e.g. given formatSpelloutDuration(60001) returns "1 minute"
+ * given formatSpelloutDuration(62005) returns "1 minute and 2 seconds"
+ * given formatSpelloutDuration(90060000) returns "1 day and 1 hour"
+ *
+ * @param msecs Time duration in milliseconds
+ * @return converted duration as a string.
+ * Units not interesting to the user, for example seconds or minutes when the first
+ * unit is day, are not returned because they are irrelevant. The same applies for
+ * seconds when the first unit is hour.
+ */
+ QString formatSpelloutDuration(quint64 msecs) const;
+
+ /**
+ * Returns a string formatted to a relative date style.
+ *
+ * If the @p date falls within one week before or after the current date
+ * then a relative date string will be returned, such as:
+ * * Yesterday
+ * * Today
+ * * Tomorrow
+ * * Last Tuesday
+ * * Next Wednesday
+ *
+ * If the @p date falls outside this period then the @p format is used.
+ *
+ * @param date the date to be formatted
+ * @param format the date format to use
+ *
+ * @return the date as a string
+ */
+ QString formatRelativeDate(const QDate &date,
+ QLocale::FormatType format) const;
+
+ /**
+ * Returns a string formatted to a relative datetime style.
+ *
+ * If the @p dateTime falls within one week before or after the current date
+ * then a relative date string will be returned, such as:
+ * * Yesterday, 3:00pm
+ * * Today, 3:00pm
+ * * Tomorrow, 3:00pm
+ * * Last Tuesday, 3:00pm
+ * * Next Wednesday, 3:00pm
+ *
+ * If the @p dateTime falls outside this period then the @p format is used.
+ *
+ * @param dateTime the date to be formatted
+ * @param format the date format to use
+ *
+ * @return the date as a string
+ */
+ QString formatRelativeDateTime(const QDateTime &dateTime,
+ QLocale::FormatType format) const;
+
+ /**
+ * Converts @p value to the appropriate string representation
+ *
+ * Example:
+ * @code
+ * // sets formatted to "1.0 kbit"
+ * auto formatted = format.formatValue(1000, KFormat::Unit::Bit, 1, KFormat::UnitPrefix::Kilo);
+ * @endcode
+ *
+ * @param value value to be formatted
+ * @param precision number of places after the decimal point to use. KDE uses
+ * 1 by default so when in doubt use 1.
+ * @param unit unit to use in result.
+ * @param prefix specific prefix to use in result. Use UnitPrefix::AutoAdjust
+ * to automatically select an appropriate prefix.
+ * @param dialect prefix standard to use. Use DefaultBinaryDialect to
+ * use the localized user selection unless you need to use a specific
+ * unit type. Only meaningful for KFormat::Unit::Byte, and ignored for
+ * all other units.
+ * @return converted size as a translated string including prefix and unit.
+ * E.g. "1.23 KiB", "2 GB" (JEDEC), "4.2 kB" (Metric), "1.2 kbit".
+ * @see Unit
+ * @see UnitPrefix
+ * @see BinaryUnitDialect
+ * @since 5.49
+ */
+ QString formatValue(double value,
+ KFormat::Unit unit,
+ int precision = 1,
+ KFormat::UnitPrefix prefix = KFormat::UnitPrefix::AutoAdjust,
+ KFormat::BinaryUnitDialect dialect = KFormat::DefaultBinaryDialect) const;
+
+ /**
+ * Converts @p value to the appropriate string representation
+ *
+ * Example:
+ * @code
+ * QString bits, slow, fast;
+ * // sets bits to "1.0 kbit", slow to "1.0 kbit/s" and fast to "12.3 Mbit/s".
+ * bits = format.formatValue(1000, QStringLiteral("bit"), 1, KFormat::UnitPrefix::Kilo);
+ * slow = format.formatValue(1000, QStringLiteral("bit/s");
+ * fast = format.formatValue(12.3e6, QStringLiteral("bit/s");
+ * @endcode
+ *
+ * @param value value to be formatted
+ * @param precision number of places after the decimal point to use. KDE uses
+ * 1 by default so when in doubt use 1.
+ * @param unit unit to use in result.
+ * @param prefix specific prefix to use in result. Use UnitPrefix::AutoAdjust
+ * to automatically select an appropriate prefix.
+ * @return converted size as a translated string including prefix and unit.
+ * E.g. "1.2 kbit", "2.4 kB", "12.3 Mbit/s"
+ * @see UnitPrefix
+ * @since 5.49
+ */
+ QString formatValue(double value,
+ const QString& unit,
+ int precision = 1,
+ KFormat::UnitPrefix prefix = KFormat::UnitPrefix::AutoAdjust) const;
+
+private:
+ QSharedDataPointer<KFormatPrivate> d;
+};
+
+#endif // KFORMAT_H
--- /dev/null
+/* This file is part of the KDE Frameworks
+
+ Copyright (C) 2013 Alex Merry <alex.merry@kdemail.net>
+ Copyright (C) 2013 John Layt <jlayt@kde.org>
+ Copyright (C) 2010 Michael Leupold <lemma@confuego.org>
+ Copyright (C) 2009 Michael Pyne <mpyne@kde.org>
+ Copyright (C) 2008 Albert Astals Cid <aacid@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include "kformatprivate_p.h"
+
+#include <QDateTime>
+
+#include <math.h>
+
+KFormatPrivate::KFormatPrivate(const QLocale &locale)
+{
+ m_locale = locale;
+}
+
+KFormatPrivate::~KFormatPrivate()
+{
+}
+
+constexpr double bpow(int exp) {
+ return (exp > 0) ? 2.0 * bpow(exp - 1) :
+ (exp < 0) ? 0.5 * bpow(exp + 1) :
+ 1.0;
+}
+
+QString KFormatPrivate::formatValue(double value,
+ KFormat::Unit unit,
+ QString unitString,
+ int precision,
+ KFormat::UnitPrefix prefix,
+ KFormat::BinaryUnitDialect dialect) const
+{
+ if (dialect <= KFormat::DefaultBinaryDialect || dialect > KFormat::LastBinaryDialect) {
+ dialect = KFormat::IECBinaryDialect;
+ }
+
+ if (static_cast<int>(prefix) < static_cast<int>(KFormat::UnitPrefix::Yocto) ||
+ static_cast<int>(prefix) > static_cast<int>(KFormat::UnitPrefix::Yotta)) {
+ prefix = KFormat::UnitPrefix::AutoAdjust;
+ }
+
+ double multiplier = 1024.0;
+ if (dialect == KFormat::MetricBinaryDialect) {
+ multiplier = 1000.0;
+ }
+
+ int power = 0;
+ if (prefix == KFormat::UnitPrefix::AutoAdjust) {
+ double adjustValue = qAbs(value);
+ while (adjustValue >= multiplier) {
+ adjustValue /= multiplier;
+ power += 1;
+ }
+ while (adjustValue && adjustValue < 1.0) {
+ adjustValue *= multiplier;
+ power -= 1;
+ }
+ const KFormat::UnitPrefix map[] = {
+ KFormat::UnitPrefix::Yocto, // -8
+ KFormat::UnitPrefix::Zepto,
+ KFormat::UnitPrefix::Atto,
+ KFormat::UnitPrefix::Femto,
+ KFormat::UnitPrefix::Pico,
+ KFormat::UnitPrefix::Nano,
+ KFormat::UnitPrefix::Micro,
+ KFormat::UnitPrefix::Milli,
+ KFormat::UnitPrefix::Unity, // 0
+ KFormat::UnitPrefix::Kilo,
+ KFormat::UnitPrefix::Mega,
+ KFormat::UnitPrefix::Giga,
+ KFormat::UnitPrefix::Tera,
+ KFormat::UnitPrefix::Peta,
+ KFormat::UnitPrefix::Exa,
+ KFormat::UnitPrefix::Zetta,
+ KFormat::UnitPrefix::Yotta, // 8
+ };
+ power = std::max(-8, std::min(8, power));
+ prefix = map[power + 8];
+ }
+
+ if (prefix == KFormat::UnitPrefix::Unity &&
+ unit == KFormat::Unit::Byte) {
+ precision = 0;
+ }
+
+ struct PrefixMapEntry
+ {
+ KFormat::UnitPrefix prefix;
+ double decimalFactor;
+ double binaryFactor;
+ QString prefixCharSI;
+ QString prefixCharIEC;
+ };
+
+ const PrefixMapEntry map[] = {
+ { KFormat::UnitPrefix::Yocto, 1e-24, bpow(-80), tr("y", "SI prefix for 10^⁻24"), QString() },
+ { KFormat::UnitPrefix::Zepto, 1e-21, bpow(-70), tr("z", "SI prefix for 10^⁻21"), QString() },
+ { KFormat::UnitPrefix::Atto, 1e-18, bpow(-60), tr("a", "SI prefix for 10^⁻18"), QString() },
+ { KFormat::UnitPrefix::Femto, 1e-15, bpow(-50), tr("f", "SI prefix for 10^⁻15"), QString() },
+ { KFormat::UnitPrefix::Pico, 1e-12, bpow(-40), tr("p", "SI prefix for 10^⁻12"), QString() },
+ { KFormat::UnitPrefix::Nano, 1e-9, bpow(-30), tr("n", "SI prefix for 10^⁻9") , QString() },
+ { KFormat::UnitPrefix::Micro, 1e-6, bpow(-20), tr("µ", "SI prefix for 10^⁻6") , QString() },
+ { KFormat::UnitPrefix::Milli, 1e-3, bpow(-10), tr("m", "SI prefix for 10^⁻3") , QString() },
+ { KFormat::UnitPrefix::Unity, 1.0, 1.0 , QString() , QString() },
+ { KFormat::UnitPrefix::Kilo, 1e3, bpow(10) , tr("k", "SI prefix for 10^3") , tr("Ki", "IEC binary prefix for 2^10") },
+ { KFormat::UnitPrefix::Mega, 1e6, bpow(20) , tr("M", "SI prefix for 10^6") , tr("Mi", "IEC binary prefix for 2^20") },
+ { KFormat::UnitPrefix::Giga, 1e9, bpow(30) , tr("G", "SI prefix for 10^9") , tr("Gi", "IEC binary prefix for 2^30") },
+ { KFormat::UnitPrefix::Tera, 1e12, bpow(40) , tr("T", "SI prefix for 10^12") , tr("Ti", "IEC binary prefix for 2^40") },
+ { KFormat::UnitPrefix::Peta, 1e15, bpow(50) , tr("P", "SI prefix for 10^15") , tr("Pi", "IEC binary prefix for 2^50") },
+ { KFormat::UnitPrefix::Exa, 1e18, bpow(60) , tr("E", "SI prefix for 10^18") , tr("Ei", "IEC binary prefix for 2^60") },
+ { KFormat::UnitPrefix::Zetta, 1e21, bpow(70) , tr("Z", "SI prefix for 10^21") , tr("Zi", "IEC binary prefix for 2^70") },
+ { KFormat::UnitPrefix::Yotta, 1e24, bpow(80) , tr("Y", "SI prefix for 10^24") , tr("Yi", "IEC binary prefix for 2^80") },
+ };
+
+ auto entry = std::find_if(std::begin(map), std::end(map),
+ [prefix](const PrefixMapEntry& e) { return e.prefix == prefix; });
+
+ switch (unit) {
+ case KFormat::Unit::Bit:
+ unitString = tr("bit", "Symbol of binary digit");
+ break;
+ case KFormat::Unit::Byte:
+ unitString = tr("B", "Symbol of byte");
+ break;
+ case KFormat::Unit::Meter:
+ unitString = tr("m", "Symbol of meter");
+ break;
+ case KFormat::Unit::Hertz:
+ unitString = tr("Hz", "Symbol of hertz");
+ break;
+ case KFormat::Unit::Other:
+ break;
+ }
+
+ if (prefix == KFormat::UnitPrefix::Unity) {
+ QString numString = m_locale.toString(value, 'f', precision);
+ //: value without prefix, format "<val> <unit>"
+ return tr("%1 %2", "no Prefix").arg(numString, unitString);
+ }
+
+ QString prefixString;
+ if (dialect == KFormat::MetricBinaryDialect) {
+ value /= entry->decimalFactor;
+ prefixString = entry->prefixCharSI;
+ } else {
+ value /= entry->binaryFactor;
+ if (dialect == KFormat::IECBinaryDialect) {
+ prefixString = entry->prefixCharIEC;
+ } else {
+ prefixString = entry->prefixCharSI.toUpper();
+ }
+ }
+
+ QString numString = m_locale.toString(value, 'f', precision);
+
+ //: value with prefix, format "<val> <prefix><unit>"
+ return tr("%1 %2%3", "MetricBinaryDialect").arg(numString, prefixString, unitString);
+}
+
+QString KFormatPrivate::formatByteSize(double size, int precision,
+ KFormat::BinaryUnitDialect dialect, KFormat::BinarySizeUnits units) const
+{
+ // Current KDE default is IECBinaryDialect
+ if (dialect <= KFormat::DefaultBinaryDialect || dialect > KFormat::LastBinaryDialect) {
+ dialect = KFormat::IECBinaryDialect;
+ }
+
+ // Current KDE default is to auto-adjust so the size falls in the range 0 to 1000/1024
+ if (units < KFormat::DefaultBinaryUnits || units > KFormat::UnitLastUnit) {
+ units = KFormat::DefaultBinaryUnits;
+ }
+
+ int unit = 0; // Selects what unit to use
+ double multiplier = 1024.0;
+
+ if (dialect == KFormat::MetricBinaryDialect) {
+ multiplier = 1000.0;
+ }
+
+ // If a specific unit conversion is given, use it directly. Otherwise
+ // search until the result is in [0, multiplier] (or out of our range).
+ if (units == KFormat::DefaultBinaryUnits) {
+ while (qAbs(size) >= multiplier && unit < int(KFormat::UnitYottaByte)) {
+ size /= multiplier;
+ ++unit;
+ }
+ } else {
+ // A specific unit is in use
+ unit = static_cast<int>(units);
+ if (unit > 0) {
+ size /= pow(multiplier, unit);
+ }
+ }
+
+ // Bytes, no rounding
+ if (unit == 0) {
+ precision = 0;
+ }
+
+ QString numString = m_locale.toString(size, 'f', precision);
+
+ // Do not remove "//:" comments below, they are used by the translators.
+ // NB: we cannot pass pluralization arguments, as the size may be negative
+ if (dialect == KFormat::MetricBinaryDialect) {
+ switch (unit) {
+ case KFormat::UnitByte:
+ //: MetricBinaryDialect size in bytes
+ return tr("%1 B", "MetricBinaryDialect").arg(numString);
+ case KFormat::UnitKiloByte:
+ //: MetricBinaryDialect size in 1000 bytes
+ return tr("%1 kB", "MetricBinaryDialect").arg(numString);
+ case KFormat::UnitMegaByte:
+ //: MetricBinaryDialect size in 10^6 bytes
+ return tr("%1 MB", "MetricBinaryDialect").arg(numString);
+ case KFormat::UnitGigaByte:
+ //: MetricBinaryDialect size in 10^9 bytes
+ return tr("%1 GB", "MetricBinaryDialect").arg(numString);
+ case KFormat::UnitTeraByte:
+ //: MetricBinaryDialect size in 10^12 bytes
+ return tr("%1 TB", "MetricBinaryDialect").arg(numString);
+ case KFormat::UnitPetaByte:
+ //: MetricBinaryDialect size in 10^15 bytes
+ return tr("%1 PB", "MetricBinaryDialect").arg(numString);
+ case KFormat::UnitExaByte:
+ //: MetricBinaryDialect size in 10^18 byte
+ return tr("%1 EB", "MetricBinaryDialect").arg(numString);
+ case KFormat::UnitZettaByte:
+ //: MetricBinaryDialect size in 10^21 bytes
+ return tr("%1 ZB", "MetricBinaryDialect").arg(numString);
+ case KFormat::UnitYottaByte:
+ //: MetricBinaryDialect size in 10^24 bytes
+ return tr("%1 YB", "MetricBinaryDialect").arg(numString);
+ }
+ } else if (dialect == KFormat::JEDECBinaryDialect) {
+ switch (unit) {
+ case KFormat::UnitByte:
+ //: JEDECBinaryDialect memory size in bytes
+ return tr("%1 B", "JEDECBinaryDialect").arg(numString);
+ case KFormat::UnitKiloByte:
+ //: JEDECBinaryDialect memory size in 1024 bytes
+ return tr("%1 KB", "JEDECBinaryDialect").arg(numString);
+ case KFormat::UnitMegaByte:
+ //: JEDECBinaryDialect memory size in 10^20 bytes
+ return tr("%1 MB", "JEDECBinaryDialect").arg(numString);
+ case KFormat::UnitGigaByte:
+ //: JEDECBinaryDialect memory size in 10^30 bytes
+ return tr("%1 GB", "JEDECBinaryDialect").arg(numString);
+ case KFormat::UnitTeraByte:
+ //: JEDECBinaryDialect memory size in 10^40 bytes
+ return tr("%1 TB", "JEDECBinaryDialect").arg(numString);
+ case KFormat::UnitPetaByte:
+ //: JEDECBinaryDialect memory size in 10^50 bytes
+ return tr("%1 PB", "JEDECBinaryDialect").arg(numString);
+ case KFormat::UnitExaByte:
+ //: JEDECBinaryDialect memory size in 10^60 bytes
+ return tr("%1 EB", "JEDECBinaryDialect").arg(numString);
+ case KFormat::UnitZettaByte:
+ //: JEDECBinaryDialect memory size in 10^70 bytes
+ return tr("%1 ZB", "JEDECBinaryDialect").arg(numString);
+ case KFormat::UnitYottaByte:
+ //: JEDECBinaryDialect memory size in 10^80 bytes
+ return tr("%1 YB", "JEDECBinaryDialect").arg(numString);
+ }
+ } else { // KFormat::IECBinaryDialect, KFormat::DefaultBinaryDialect
+ switch (unit) {
+ case KFormat::UnitByte:
+ //: IECBinaryDialect size in bytes
+ return tr("%1 B", "IECBinaryDialect").arg(numString);
+ case KFormat::UnitKiloByte:
+ //: IECBinaryDialect size in 1024 bytes
+ return tr("%1 KiB", "IECBinaryDialect").arg(numString);
+ case KFormat::UnitMegaByte:
+ //: IECBinaryDialect size in 10^20 bytes
+ return tr("%1 MiB", "IECBinaryDialect").arg(numString);
+ case KFormat::UnitGigaByte:
+ //: IECBinaryDialect size in 10^30 bytes
+ return tr("%1 GiB", "IECBinaryDialect").arg(numString);
+ case KFormat::UnitTeraByte:
+ //: IECBinaryDialect size in 10^40 bytes
+ return tr("%1 TiB", "IECBinaryDialect").arg(numString);
+ case KFormat::UnitPetaByte:
+ //: IECBinaryDialect size in 10^50 bytes
+ return tr("%1 PiB", "IECBinaryDialect").arg(numString);
+ case KFormat::UnitExaByte:
+ //: IECBinaryDialect size in 10^60 bytes
+ return tr("%1 EiB", "IECBinaryDialect").arg(numString);
+ case KFormat::UnitZettaByte:
+ //: IECBinaryDialect size in 10^70 bytes
+ return tr("%1 ZiB", "IECBinaryDialect").arg(numString);
+ case KFormat::UnitYottaByte:
+ //: IECBinaryDialect size in 10^80 bytes
+ return tr("%1 YiB", "IECBinaryDialect").arg(numString);
+ }
+ }
+
+ // Should never reach here
+ Q_ASSERT(false);
+ return numString;
+}
+
+enum TimeConstants {
+ MSecsInDay = 86400000,
+ MSecsInHour = 3600000,
+ MSecsInMinute = 60000,
+ MSecsInSecond = 1000
+};
+
+QString KFormatPrivate::formatDuration(quint64 msecs, KFormat::DurationFormatOptions options) const
+{
+ quint64 ms = msecs;
+ if (options & KFormat::HideSeconds) {
+ //round to nearest minute
+ ms = qRound64(ms / (qreal)MSecsInMinute) * MSecsInMinute ;
+ } else if (!(options & KFormat::ShowMilliseconds)) {
+ //round to nearest second
+ ms = qRound64(ms / (qreal)MSecsInSecond) * MSecsInSecond ;
+ }
+
+ int hours = ms / MSecsInHour;
+ ms = ms % MSecsInHour;
+ int minutes = ms / MSecsInMinute;
+ ms = ms % MSecsInMinute;
+ int seconds = ms / MSecsInSecond;
+ ms = ms % MSecsInSecond;
+
+ if ((options & KFormat::InitialDuration) == KFormat::InitialDuration) {
+
+ if ((options & KFormat::FoldHours) == KFormat::FoldHours
+ && (options & KFormat::ShowMilliseconds) == KFormat::ShowMilliseconds) {
+ //: @item:intext Duration format minutes, seconds and milliseconds
+ return tr("%1m%2.%3s").arg(hours * 60 + minutes, 1, 10, QLatin1Char('0'))
+ .arg(seconds, 2, 10, QLatin1Char('0'))
+ .arg(ms, 3, 10, QLatin1Char('0'));
+ } else if ((options & KFormat::FoldHours) == KFormat::FoldHours) {
+ //: @item:intext Duration format minutes and seconds
+ return tr("%1m%2s").arg(hours * 60 + minutes, 1, 10, QLatin1Char('0'))
+ .arg(seconds, 2, 10, QLatin1Char('0'));
+ } else if ((options & KFormat::HideSeconds) == KFormat::HideSeconds) {
+ //: @item:intext Duration format hours and minutes
+ return tr("%1h%2m").arg(hours, 1, 10, QLatin1Char('0'))
+ .arg(minutes, 2, 10, QLatin1Char('0'));
+ } else if ((options & KFormat::ShowMilliseconds) == KFormat::ShowMilliseconds) {
+ //: @item:intext Duration format hours, minutes, seconds, milliseconds
+ return tr("%1h%2m%3.%4s").arg(hours, 1, 10, QLatin1Char('0'))
+ .arg(minutes, 2, 10, QLatin1Char('0'))
+ .arg(seconds, 2, 10, QLatin1Char('0'))
+ .arg(ms, 3, 10, QLatin1Char('0'));
+ } else { // Default
+ //: @item:intext Duration format hours, minutes, seconds
+ return tr("%1h%2m%3s").arg(hours, 1, 10, QLatin1Char('0'))
+ .arg(minutes, 2, 10, QLatin1Char('0'))
+ .arg(seconds, 2, 10, QLatin1Char('0'));
+ }
+
+ } else {
+
+ if ((options & KFormat::FoldHours) == KFormat::FoldHours
+ && (options & KFormat::ShowMilliseconds) == KFormat::ShowMilliseconds) {
+ //: @item:intext Duration format minutes, seconds and milliseconds
+ return tr("%1:%2.%3").arg(hours * 60 + minutes, 1, 10, QLatin1Char('0'))
+ .arg(seconds, 2, 10, QLatin1Char('0'))
+ .arg(ms, 3, 10, QLatin1Char('0'));
+ } else if ((options & KFormat::FoldHours) == KFormat::FoldHours) {
+ //: @item:intext Duration format minutes and seconds
+ return tr("%1:%2").arg(hours * 60 + minutes, 1, 10, QLatin1Char('0'))
+ .arg(seconds, 2, 10, QLatin1Char('0'));
+ } else if ((options & KFormat::HideSeconds) == KFormat::HideSeconds) {
+ //: @item:intext Duration format hours and minutes
+ return tr("%1:%2").arg(hours, 1, 10, QLatin1Char('0'))
+ .arg(minutes, 2, 10, QLatin1Char('0'));
+ } else if ((options & KFormat::ShowMilliseconds) == KFormat::ShowMilliseconds) {
+ //: @item:intext Duration format hours, minutes, seconds, milliseconds
+ return tr("%1:%2:%3.%4").arg(hours, 1, 10, QLatin1Char('0'))
+ .arg(minutes, 2, 10, QLatin1Char('0'))
+ .arg(seconds, 2, 10, QLatin1Char('0'))
+ .arg(ms, 3, 10, QLatin1Char('0'));
+ } else { // Default
+ //: @item:intext Duration format hours, minutes, seconds
+ return tr("%1:%2:%3").arg(hours, 1, 10, QLatin1Char('0'))
+ .arg(minutes, 2, 10, QLatin1Char('0'))
+ .arg(seconds, 2, 10, QLatin1Char('0'));
+ }
+
+ }
+
+ Q_UNREACHABLE();
+ return QString();
+}
+
+QString KFormatPrivate::formatDecimalDuration(quint64 msecs, int decimalPlaces) const
+{
+ if (msecs >= MSecsInDay) {
+ //: @item:intext %1 is a real number, e.g. 1.23 days
+ return tr("%1 days").arg(m_locale.toString(msecs / (MSecsInDay * 1.0), 'f', decimalPlaces));
+ } else if (msecs >= MSecsInHour) {
+ //: @item:intext %1 is a real number, e.g. 1.23 hours
+ return tr("%1 hours").arg(m_locale.toString(msecs / (MSecsInHour * 1.0), 'f', decimalPlaces));
+ } else if (msecs >= MSecsInMinute) {
+ //: @item:intext %1 is a real number, e.g. 1.23 minutes
+ return tr("%1 minutes").arg(m_locale.toString(msecs / (MSecsInMinute * 1.0), 'f', decimalPlaces));
+ } else if (msecs >= MSecsInSecond) {
+ //: @item:intext %1 is a real number, e.g. 1.23 seconds
+ return tr("%1 seconds").arg(m_locale.toString(msecs / (MSecsInSecond * 1.0), 'f', decimalPlaces));
+ }
+ //: @item:intext %1 is a whole number
+ //~ singular %n millisecond
+ //~ plural %n milliseconds
+ return tr("%n millisecond(s)", nullptr, msecs);
+}
+
+enum DurationUnits {
+ Days = 0,
+ Hours,
+ Minutes,
+ Seconds
+};
+
+static QString formatSingleDuration(DurationUnits units, int n)
+{
+ // NB: n is guaranteed to be non-negative
+ switch (units) {
+ case Days:
+ //: @item:intext %n is a whole number
+ //~ singular %n day
+ //~ plural %n days
+ return KFormatPrivate::tr("%n day(s)", nullptr, n);
+ case Hours:
+ //: @item:intext %n is a whole number
+ //~ singular %n hour
+ //~ plural %n hours
+ return KFormatPrivate::tr("%n hour(s)", nullptr, n);
+ case Minutes:
+ //: @item:intext %n is a whole number
+ //~ singular %n minute
+ //~ plural %n minutes
+ return KFormatPrivate::tr("%n minute(s)", nullptr, n);
+ case Seconds:
+ //: @item:intext %n is a whole number
+ //~ singular %n second
+ //~ plural %n seconds
+ return KFormatPrivate::tr("%n second(s)", nullptr, n);
+ }
+ Q_ASSERT(false);
+ return QString();
+}
+
+QString KFormatPrivate::formatSpelloutDuration(quint64 msecs) const
+{
+ quint64 ms = msecs;
+ int days = ms / MSecsInDay;
+ ms = ms % (MSecsInDay);
+ int hours = ms / MSecsInHour;
+ ms = ms % MSecsInHour;
+ int minutes = ms / MSecsInMinute;
+ ms = ms % MSecsInMinute;
+ int seconds = qRound(ms / 1000.0);
+
+ // Handle correctly problematic case #1 (look at KFormatTest::prettyFormatDuration())
+ if (seconds == 60) {
+ return formatSpelloutDuration(msecs - ms + MSecsInMinute);
+ }
+
+ if (days && hours) {
+ /*: @item:intext days and hours. This uses the previous item:intext messages.
+ If this does not fit the grammar of your language please contact the i18n team to solve the problem */
+ return tr("%1 and %2").arg(formatSingleDuration(Days, days), formatSingleDuration(Hours, hours));
+ } else if (days) {
+ return formatSingleDuration(Days, days);
+ } else if (hours && minutes) {
+ /*: @item:intext hours and minutes. This uses the previous item:intext messages.
+ If this does not fit the grammar of your language please contact the i18n team to solve the problem */
+ return tr("%1 and %2").arg(formatSingleDuration(Hours, hours), formatSingleDuration(Minutes, minutes));
+ } else if (hours) {
+ return formatSingleDuration(Hours, hours);
+ } else if (minutes && seconds) {
+ /*: @item:intext minutes and seconds. This uses the previous item:intext messages.
+ If this does not fit the grammar of your language please contact the i18n team to solve the problem */
+ return tr("%1 and %2").arg(formatSingleDuration(Minutes, minutes), formatSingleDuration(Seconds, seconds));
+ } else if (minutes) {
+ return formatSingleDuration(Minutes, minutes);
+ } else {
+ return formatSingleDuration(Seconds, seconds);
+ }
+}
+
+QString KFormatPrivate::formatRelativeDate(const QDate &date, QLocale::FormatType format) const
+{
+ if (!date.isValid()) {
+ return tr("Invalid date", "used when a relative date string can't be generated because the date is invalid");
+ }
+
+ const qint64 daysTo = QDate::currentDate().daysTo(date);
+ if (daysTo > 7 || daysTo < -7) {
+ return m_locale.toString(date, format);
+ }
+
+ switch (daysTo) {
+ case 1:
+ return tr("Tomorrow");
+ case 0:
+ return tr("Today");
+ case -1:
+ return tr("Yesterday");
+ }
+
+ if (daysTo < -1) {
+ switch (date.dayOfWeek()) {
+ case 1:
+ return tr("Last Monday", "most recent such day before today");
+ case 2:
+ return tr("Last Tuesday", "most recent such day before today");
+ case 3:
+ return tr("Last Wednesday", "most recent such day before today");
+ case 4:
+ return tr("Last Thursday", "most recent such day before today");
+ case 5:
+ return tr("Last Friday", "most recent such day before today");
+ case 6:
+ return tr("Last Saturday", "most recent such day before today");
+ case 7:
+ return tr("Last Sunday", "most recent such day before today");
+ }
+ } else if (daysTo > 1) {
+ switch (date.dayOfWeek()) {
+ case 1:
+ return tr("Next Monday", "the next such day after today");
+ case 2:
+ return tr("Next Tuesday", "the next such day after today");
+ case 3:
+ return tr("Next Wednesday", "the next such day after today");
+ case 4:
+ return tr("Next Thursday", "the next such day after today");
+ case 5:
+ return tr("Next Friday", "the next such day after today");
+ case 6:
+ return tr("Next Saturday", "the next such day after today");
+ case 7:
+ return tr("Next Sunday", "the next such day after today");
+ }
+ }
+ Q_UNREACHABLE();
+}
+
+QString KFormatPrivate::formatRelativeDateTime(const QDateTime &dateTime, QLocale::FormatType format) const
+{
+ const qint64 daysTo = QDate::currentDate().daysTo(dateTime.date());
+ if (daysTo > 7 || daysTo < -7) {
+ return m_locale.toString(dateTime, format);
+ }
+
+ /*: relative datetime with %1 result of formatReleativeDate() and %2 the formatted time
+ If this does not fit the grammar of your language please contact the i18n team to solve the problem */
+ return tr("%1, %2").arg(formatRelativeDate(dateTime.date(), format), m_locale.toString(dateTime.time(), format));
+}
--- /dev/null
+/* This file is part of the KDE Frameworks
+
+ Copyright (C) 2013 Alex Merry <alex.merry@kdemail.net>
+ Copyright (C) 2013 John Layt <jlayt@kde.org>
+ Copyright (C) 2010 Michael Leupold <lemma@confuego.org>
+ Copyright (C) 2009 Michael Pyne <mpyne@kde.org>
+ Copyright (C) 2008 Albert Astals Cid <aacid@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef KFORMATPRIVATE_P_H
+#define KFORMATPRIVATE_P_H
+
+#include "kformat.h"
+
+#include <QCoreApplication> // for Q_DECLARE_TR_FUNCTIONS
+
+class KFormatPrivate : public QSharedData
+{
+ Q_DECLARE_TR_FUNCTIONS(KFormat)
+
+public:
+
+ explicit KFormatPrivate(const QLocale &locale);
+ virtual ~KFormatPrivate();
+
+ QString formatByteSize(double size,
+ int precision,
+ KFormat::BinaryUnitDialect dialect,
+ KFormat::BinarySizeUnits units) const;
+
+ QString formatValue(double value,
+ KFormat::Unit unit,
+ QString unitString,
+ int precision,
+ KFormat::UnitPrefix prefix,
+ KFormat::BinaryUnitDialect dialect) const;
+
+ QString formatDuration(quint64 msecs,
+ KFormat::DurationFormatOptions options) const;
+
+ QString formatDecimalDuration(quint64 msecs,
+ int decimalPlaces) const;
+
+ QString formatSpelloutDuration(quint64 msecs) const;
+
+ QString formatRelativeDate(const QDate &date,
+ QLocale::FormatType format) const;
+
+ QString formatRelativeDateTime(const QDateTime &dateTime,
+ QLocale::FormatType format) const;
+
+private:
+
+ QLocale m_locale;
+};
+
+#endif // KFORMATPRIVATE_P_H
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ Copyright (c) 2003,2007 Oswald Buddenhagen <ossi@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include "kshell.h"
+#include "kshell_p.h"
+#include "kuser.h"
+
+#include <QDir>
+
+QString KShell::homeDir(const QString &user)
+{
+ if (user.isEmpty()) {
+ return QDir::homePath();
+ }
+ return KUser(user).homeDir();
+}
+
+QString KShell::joinArgs(const QStringList &args)
+{
+ QString ret;
+ for (QStringList::ConstIterator it = args.begin(); it != args.end(); ++it) {
+ if (!ret.isEmpty()) {
+ ret.append(QLatin1Char(' '));
+ }
+ ret.append(quoteArg(*it));
+ }
+ return ret;
+}
+
+#ifdef Q_OS_WIN
+# define ESCAPE '^'
+#else
+# define ESCAPE '\\'
+#endif
+
+QString KShell::tildeExpand(const QString &fname)
+{
+ if (!fname.isEmpty() && fname[0] == QLatin1Char('~')) {
+ int pos = fname.indexOf(QLatin1Char('/'));
+ if (pos < 0) {
+ return homeDir(fname.mid(1));
+ }
+ QString ret = homeDir(fname.mid(1, pos - 1));
+ if (!ret.isNull()) {
+ ret += fname.midRef(pos);
+ }
+ return ret;
+ } else if (fname.length() > 1 && fname[0] == QLatin1Char(ESCAPE) && fname[1] == QLatin1Char('~')) {
+ return fname.mid(1);
+ }
+ return fname;
+}
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ Copyright (c) 2003,2007 Oswald Buddenhagen <ossi@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+#ifndef KSHELL_H
+#define KSHELL_H
+
+#include <kcoreaddons_export.h>
+#include <qglobal.h>
+
+class QStringList;
+class QString;
+
+/**
+ * \namespace KShell
+ * Emulates some basic system shell functionality.
+ * @see KStringHandler
+ */
+namespace KShell
+{
+
+/**
+ * Flags for splitArgs().
+ */
+enum Option {
+ NoOptions = 0,
+
+ /**
+ * Perform tilde expansion.
+ * On Windows, this flag is ignored, as the Windows shell has no
+ * equivalent functionality.
+ */
+ TildeExpand = 1,
+
+ /**
+ * Put the parser into full shell mode and bail out if a too complex
+ * construct is encountered.
+ * A particular purpose of this flag is finding out whether the
+ * command line being split would be executable directly (via
+ * KProcess::setProgram()) or whether it needs to be run through
+ * a real shell (via KProcess::setShellCommand()). Note, however,
+ * that shell builtins are @em not recognized - you need to do that
+ * yourself (compare with a list of known commands or verify that an
+ * executable exists for the named command).
+ *
+ * Meta characters that cause a bail-out are the command separators
+ * @c semicolon and @c ampersand, the redirection symbols @c less-than,
+ * @c greater-than and the @c pipe @c symbol and the grouping symbols
+ * opening and closing @c parentheses.
+ *
+ * Further meta characters on *NIX are the grouping symbols
+ * opening and closing @c braces, the command substitution symbol
+ * @c backquote, the generic substitution symbol @c dollar (if
+ * not followed by an apostrophe), the wildcards @c asterisk,
+ * @c question @c mark and opening and closing @c square @c brackets
+ * and the comment symbol @c hash @c mark.
+ * Additionally, a variable assignment in the first word is recognized.
+ *
+ * A further meta character on Windows is the environment variable
+ * expansion symbol @c percent. Occurrences of @c \%PERCENT_SIGN% as
+ * inserted by quoteArg() are converted back and cause no bail-out,
+ * though.
+ */
+ AbortOnMeta = 2
+};
+Q_DECLARE_FLAGS(Options, Option)
+
+/**
+ * Status codes from splitArgs()
+ */
+enum Errors {
+ /**
+ * Success.
+ */
+ NoError = 0,
+
+ /**
+ * Indicates a parsing error, like an unterminated quoted string.
+ */
+ BadQuoting,
+
+ /**
+ * The AbortOnMeta flag was set and an unhandled shell meta character
+ * was encountered.
+ */
+ FoundMeta
+};
+
+/**
+ * Splits @p cmd according to system shell word splitting and quoting rules.
+ * Can optionally perform tilde expansion and/or abort if it finds shell
+ * meta characters it cannot process.
+ *
+ * On *NIX the behavior is based on the POSIX shell and bash:
+ * - Whitespace splits tokens
+ * - The backslash quotes the following character
+ * - A string enclosed in single quotes is not split. No shell meta
+ * characters are interpreted.
+ * - A string enclosed in double quotes is not split. Within the string,
+ * the backslash quotes shell meta characters - if it is followed
+ * by a "meaningless" character, the backslash is output verbatim.
+ * - A string enclosed in $'' is not split. Within the string, the
+ * backslash has a similar meaning to the one in C strings. Consult
+ * the bash manual for more information.
+ *
+ * On Windows, the behavior is defined by the Microsoft C runtime. Qt and
+ * many other implementations comply with this standard, but many do not.
+ * - Whitespace splits tokens
+ * - A string enclosed in double quotes is not split
+ * - 2N double quotes within a quoted string yield N literal quotes.
+ * This is not documented on MSDN.
+ * - Backslashes have special semantics iff they are followed by a double
+ * quote:
+ * - 2N backslashes + double quote => N backslashes and begin/end quoting
+ * - 2N+1 backslashes + double quote => N backslashes + literal quote
+ *
+ * If AbortOnMeta is used on Windows, this function applies cmd shell
+ * semantics before proceeding with word splitting:
+ * - Cmd ignores @em all special chars between double quotes.
+ * Note that the quotes are @em not removed at this stage - the
+ * tokenization rules described above still apply.
+ * - The @c circumflex is the escape char for everything including
+ * itself.
+ *
+ * @param cmd the command to split
+ * @param flags operation flags, see \ref Option
+ * @param err if not NULL, a status code will be stored at the pointer
+ * target, see \ref Errors
+ * @return a list of unquoted words or an empty list if an error occurred
+ */
+KCOREADDONS_EXPORT QStringList splitArgs(const QString &cmd, Options flags = NoOptions, Errors *err = nullptr);
+
+/**
+ * Quotes and joins @p args together according to system shell rules.
+ *
+ * If the output is fed back into splitArgs(), the AbortOnMeta flag
+ * needs to be used on Windows. On *NIX, no such requirement exists.
+ *
+ * See quoteArg() for more info.
+ *
+ * @param args a list of strings to quote and join
+ * @return a command suitable for shell execution
+ */
+KCOREADDONS_EXPORT QString joinArgs(const QStringList &args);
+
+/**
+ * Quotes @p arg according to system shell rules.
+ *
+ * This function can be used to quote an argument string such that
+ * the shell processes it properly. This is e.g. necessary for
+ * user-provided file names which may contain spaces or quotes.
+ * It also prevents expansion of wild cards and environment variables.
+ *
+ * On *NIX, the output is POSIX shell compliant.
+ * On Windows, it is compliant with the argument splitting code of the
+ * Microsoft C runtime and the cmd shell used together.
+ * Occurrences of the @c percent @c sign are replaced with
+ * @c \%PERCENT_SIGN% to prevent spurious variable expansion;
+ * related KDE functions are prepared for this.
+ *
+ * @param arg the argument to quote
+ * @return the quoted argument
+ */
+KCOREADDONS_EXPORT QString quoteArg(const QString &arg);
+
+/**
+ * Performs tilde expansion on @p path. Interprets "~/path" and
+ * "~user/path". If the path starts with an escaped tilde ("\~" on UNIX,
+ * "^~" on Windows), the escape char is removed and the path is returned
+ * as is.
+ *
+ * Note that if @p path starts with a tilde but cannot be properly expanded,
+ * this function will return an empty string.
+ *
+ * @param path the path to tilde-expand
+ * @return the expanded path
+ */
+KCOREADDONS_EXPORT QString tildeExpand(const QString &path);
+}
+
+Q_DECLARE_OPERATORS_FOR_FLAGS(KShell::Options)
+
+#endif /* KSHELL_H */
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ Copyright (c) 2008 Oswald Buddenhagen <ossi@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef KSHELL_P_H
+#define KSHELL_P_H
+
+class QString;
+
+namespace KShell
+{
+
+QString homeDir(const QString &user);
+QString quoteArgInternal(const QString &arg, bool _inquote);
+
+}
+
+#define PERCENT_VARIABLE QLatin1String("PERCENT_SIGN")
+#define PERCENT_ESCAPE QLatin1String("%PERCENT_SIGN%")
+
+#endif /* KSHELL_P_H */
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ Copyright (c) 2003,2007 Oswald Buddenhagen <ossi@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include "kshell.h"
+#include "kshell_p.h"
+
+#include <kuser.h>
+
+#include <QChar>
+#include <QStringList>
+
+static int fromHex(QChar cUnicode)
+{
+ char c = cUnicode.toLatin1();
+
+ if (c >= '0' && c <= '9') {
+ return c - '0';
+ } else if (c >= 'A' && c <= 'F') {
+ return c - 'A' + 10;
+ } else if (c >= 'a' && c <= 'f') {
+ return c - 'a' + 10;
+ }
+ return -1;
+}
+
+inline static bool isQuoteMeta(QChar cUnicode)
+{
+#if 0 // it's not worth it, especially after seeing gcc's asm output ...
+ static const uchar iqm[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00
+ }; // \'"$
+
+ return (c < sizeof(iqm) * 8) && (iqm[c / 8] & (1 << (c & 7)));
+#else
+ char c = cUnicode.toLatin1();
+ return c == '\\' || c == '\'' || c == '"' || c == '$';
+#endif
+}
+
+inline static bool isMeta(QChar cUnicode)
+{
+ static const uchar iqm[] = {
+ 0x00, 0x00, 0x00, 0x00, 0xdc, 0x07, 0x00, 0xd8,
+ 0x00, 0x00, 0x00, 0x38, 0x01, 0x00, 0x00, 0x38
+ }; // \'"$`<>|;&(){}*?#[]
+
+ uint c = cUnicode.unicode();
+
+ return (c < sizeof(iqm) * 8) && (iqm[c / 8] & (1 << (c & 7)));
+}
+
+QStringList KShell::splitArgs(const QString &args, Options flags, Errors *err)
+{
+ QStringList ret;
+ bool firstword = flags & AbortOnMeta;
+
+ for (int pos = 0;;) {
+ QChar c;
+ do {
+ if (pos >= args.length()) {
+ goto okret;
+ }
+ c = args.unicode()[pos++];
+ } while (c == QLatin1Char(' '));
+ QString cret;
+ if ((flags & TildeExpand) && c == QLatin1Char('~')) {
+ int opos = pos;
+ for (;; pos++) {
+ if (pos >= args.length()) {
+ break;
+ }
+ c = args.unicode()[pos];
+ if (c == QLatin1Char('/') || c == QLatin1Char(' ')) {
+ break;
+ }
+ if (isQuoteMeta(c)) {
+ pos = opos;
+ c = QLatin1Char('~');
+ goto notilde;
+ }
+ if ((flags & AbortOnMeta) && isMeta(c)) {
+ goto metaerr;
+ }
+ }
+ QString ccret = homeDir(args.mid(opos, pos - opos));
+ if (ccret.isEmpty()) {
+ pos = opos;
+ c = QLatin1Char('~');
+ goto notilde;
+ }
+ if (pos >= args.length()) {
+ ret += ccret;
+ goto okret;
+ }
+ pos++;
+ if (c == QLatin1Char(' ')) {
+ ret += ccret;
+ firstword = false;
+ continue;
+ }
+ cret = ccret;
+ }
+ // before the notilde label, as a tilde does not match anyway
+ if (firstword) {
+ if (c == QLatin1Char('_') ||
+ (c >= QLatin1Char('A') && c <= QLatin1Char('Z')) ||
+ (c >= QLatin1Char('a') && c <= QLatin1Char('z'))) {
+ int pos2 = pos;
+ QChar cc;
+ do {
+ if (pos2 >= args.length()) {
+ // Exactly one word
+ ret += args.mid(pos - 1);
+ goto okret;
+ }
+ cc = args.unicode()[pos2++];
+ } while (cc == QLatin1Char('_') ||
+ (cc >= QLatin1Char('A') && cc <= QLatin1Char('Z')) ||
+ (cc >= QLatin1Char('a') && cc <= QLatin1Char('z')) ||
+ (cc >= QLatin1Char('0') && cc <= QLatin1Char('9')));
+ if (cc == QLatin1Char('=')) {
+ goto metaerr;
+ }
+ }
+ }
+ notilde:
+ do {
+ if (c == QLatin1Char('\'')) {
+ int spos = pos;
+ do {
+ if (pos >= args.length()) {
+ goto quoteerr;
+ }
+ c = args.unicode()[pos++];
+ } while (c != QLatin1Char('\''));
+ cret += args.midRef(spos, pos - spos - 1);
+ } else if (c == QLatin1Char('"')) {
+ for (;;) {
+ if (pos >= args.length()) {
+ goto quoteerr;
+ }
+ c = args.unicode()[pos++];
+ if (c == QLatin1Char('"')) {
+ break;
+ }
+ if (c == QLatin1Char('\\')) {
+ if (pos >= args.length()) {
+ goto quoteerr;
+ }
+ c = args.unicode()[pos++];
+ if (c != QLatin1Char('"') &&
+ c != QLatin1Char('\\') &&
+ !((flags & AbortOnMeta) &&
+ (c == QLatin1Char('$') ||
+ c == QLatin1Char('`')))) {
+ cret += QLatin1Char('\\');
+ }
+ } else if ((flags & AbortOnMeta) &&
+ (c == QLatin1Char('$') ||
+ c == QLatin1Char('`'))) {
+ goto metaerr;
+ }
+ cret += c;
+ }
+ } else if (c == QLatin1Char('$') && pos < args.length() &&
+ args.unicode()[pos] == QLatin1Char('\'')) {
+ pos++;
+ for (;;) {
+ if (pos >= args.length()) {
+ goto quoteerr;
+ }
+ c = args.unicode()[pos++];
+ if (c == QLatin1Char('\'')) {
+ break;
+ }
+ if (c == QLatin1Char('\\')) {
+ if (pos >= args.length()) {
+ goto quoteerr;
+ }
+ c = args.unicode()[pos++];
+ switch (c.toLatin1()) {
+ case 'a': cret += QLatin1Char('\a'); break;
+ case 'b': cret += QLatin1Char('\b'); break;
+ case 'e': cret += QLatin1Char('\033'); break;
+ case 'f': cret += QLatin1Char('\f'); break;
+ case 'n': cret += QLatin1Char('\n'); break;
+ case 'r': cret += QLatin1Char('\r'); break;
+ case 't': cret += QLatin1Char('\t'); break;
+ case '\\': cret += QLatin1Char('\\'); break;
+ case '\'': cret += QLatin1Char('\''); break;
+ case 'c':
+ if (pos >= args.length()) {
+ goto quoteerr;
+ }
+ cret += args.unicode()[pos++].toLatin1() & 31;
+ break;
+ case 'x': {
+ if (pos >= args.length()) {
+ goto quoteerr;
+ }
+ int hv = fromHex(args.unicode()[pos++]);
+ if (hv < 0) {
+ goto quoteerr;
+ }
+ if (pos < args.length()) {
+ int hhv = fromHex(args.unicode()[pos]);
+ if (hhv > 0) {
+ hv = hv * 16 + hhv;
+ pos++;
+ }
+ cret += QChar(hv);
+ }
+ break;
+ }
+ default:
+ if (c.toLatin1() >= '0' && c.toLatin1() <= '7') {
+ char cAscii = c.toLatin1();
+ int hv = cAscii - '0';
+ for (int i = 0; i < 2; i++) {
+ if (pos >= args.length()) {
+ break;
+ }
+ c = args.unicode()[pos];
+ if (c.toLatin1() < '0' || c.toLatin1() > '7') {
+ break;
+ }
+ hv = hv * 8 + (c.toLatin1() - '0');
+ pos++;
+ }
+ cret += QChar(hv);
+ } else {
+ cret += QLatin1Char('\\');
+ cret += c;
+ }
+ break;
+ }
+ } else {
+ cret += c;
+ }
+ }
+ } else {
+ if (c == QLatin1Char('\\')) {
+ if (pos >= args.length()) {
+ goto quoteerr;
+ }
+ c = args.unicode()[pos++];
+ } else if ((flags & AbortOnMeta) && isMeta(c)) {
+ goto metaerr;
+ }
+ cret += c;
+ }
+ if (pos >= args.length()) {
+ break;
+ }
+ c = args.unicode()[pos++];
+ } while (c != QLatin1Char(' '));
+ ret += cret;
+ firstword = false;
+ }
+
+okret:
+ if (err) {
+ *err = NoError;
+ }
+ return ret;
+
+quoteerr:
+ if (err) {
+ *err = BadQuoting;
+ }
+ return QStringList();
+
+metaerr:
+ if (err) {
+ *err = FoundMeta;
+ }
+ return QStringList();
+}
+
+inline static bool isSpecial(QChar cUnicode)
+{
+ static const uchar iqm[] = {
+ 0xff, 0xff, 0xff, 0xff, 0xdf, 0x07, 0x00, 0xd8,
+ 0x00, 0x00, 0x00, 0x38, 0x01, 0x00, 0x00, 0x78
+ }; // 0-32 \'"$`<>|;&(){}*?#!~[]
+
+ uint c = cUnicode.unicode();
+ return ((c < sizeof(iqm) * 8) && (iqm[c / 8] & (1 << (c & 7))));
+}
+
+QString KShell::quoteArg(const QString &arg)
+{
+ if (!arg.length()) {
+ return QString::fromLatin1("''");
+ }
+ for (int i = 0; i < arg.length(); i++)
+ if (isSpecial(arg.unicode()[i])) {
+ QChar q(QLatin1Char('\''));
+ return QString(arg).replace(q, QLatin1String("'\\''")).prepend(q).append(q);
+ }
+ return arg;
+}
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ Copyright (c) 2007 Bernhard Loos <nhuh.put@web.de>
+ Copyright (c) 2007,2008 Oswald Buddenhagen <ossi@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include "kshell.h"
+#include "kshell_p.h"
+
+#include <QString>
+#include <QStringList>
+#include <QDir>
+
+/*
+ * A short introduction into cmd semantics:
+ * - Variable expansion is done first, without regard to *any* escaping -
+ * if something looks like an existing variable, it is replaced.
+ * - Then follows regular tokenization by the shell. &, &&, | and || are
+ * command delimiters. ( and ) are command grouping operators; they are
+ * recognized only a the start resp. end of a command; mismatched )s are
+ * an error if any (s are present. <, > are just like under UNIX - they can
+ * appear *anywhere* in a command, perform their function and are cut out.
+ * @ at the start of a command is eaten (local echo off - no function as
+ * far as cmd /c is concerned). : at the start of a command declares a label,
+ * which effectively means the remainder of the line is a comment - note that
+ * command separators are not recognized past that point.
+ * ^ is the escape char for everything including itself.
+ * cmd ignores *all* special chars between double quotes, so there is no
+ * way to escape the closing quote. Note that the quotes are *not* removed
+ * from the resulting command line.
+ * - Then follows delayed variable expansion if it is enabled and at least
+ * one exclamation mark is present. This involves another layer of ^
+ * escaping, regardless of quotes. (Win2k+)
+ * - Then follows argument splitting as described in
+ * http://msdn2.microsoft.com/en-us/library/ms880421.aspx .
+ * Note that this is done by the called application and therefore might
+ * be subject to completely different semantics, in fact.
+ */
+
+inline static bool isMetaChar(ushort c)
+{
+ static const uchar iqm[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x40, 0x03, 0x00, 0x50,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10
+ }; // &()<>|
+
+ return (c < sizeof(iqm) * 8) && (iqm[c / 8] & (1 << (c & 7)));
+}
+
+inline static bool isSpecialChar(ushort c)
+{
+ // Chars that should be quoted (TM). This includes:
+ // - control chars & space
+ // - the shell meta chars &()<>^|
+ // - the potential separators ,;=
+ static const uchar iqm[] = {
+ 0xff, 0xff, 0xff, 0xff, 0x41, 0x13, 0x00, 0x78,
+ 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x10
+ };
+
+ return (c < sizeof(iqm) * 8) && (iqm[c / 8] & (1 << (c & 7)));
+}
+
+inline static bool isWhiteSpace(ushort c)
+{
+ return c == ' ' || c == '\t';
+}
+
+QStringList KShell::splitArgs(const QString &_args, Options flags, Errors *err)
+{
+ QString args(_args);
+ QStringList ret;
+
+ const QLatin1Char bs('\\'), dq('\"');
+
+ if (flags & AbortOnMeta) {
+ args.remove(PERCENT_ESCAPE);
+ if (args.indexOf(QLatin1Char('%')) >= 0) {
+ if (err) {
+ *err = FoundMeta;
+ }
+ return QStringList();
+ }
+
+ args = _args;
+ args.replace(PERCENT_ESCAPE, QLatin1String("%"));
+
+ if (!args.isEmpty() && args[0].unicode() == '@') {
+ args.remove(0, 1);
+ }
+
+ for (int p = 0; p < args.length(); p++) {
+ ushort c = args[p].unicode();
+ if (c == '^') {
+ args.remove(p, 1);
+ } else if (c == '"') {
+ while (++p < args.length() && args[p].unicode() != '"')
+ ;
+ } else if (isMetaChar(c)) {
+ if (err) {
+ *err = FoundMeta;
+ }
+ return QStringList();
+ }
+ }
+ }
+
+ if (err) {
+ *err = NoError;
+ }
+
+ int p = 0;
+ const int length = args.length();
+ forever {
+ while (p < length && isWhiteSpace(args[p].unicode()))
+ {
+ ++p;
+ }
+ if (p == length)
+ {
+ return ret;
+ }
+
+ QString arg;
+ bool inquote = false;
+ forever {
+ bool copy = true; // copy this char
+ int bslashes = 0; // number of preceding backslashes to insert
+ while (p < length && args[p] == bs)
+ {
+ ++p;
+ ++bslashes;
+ }
+ if (p < length && args[p] == dq)
+ {
+ if (bslashes % 2 == 0) {
+ // Even number of backslashes, so the quote is not escaped.
+ if (inquote) {
+ if (p + 1 < length && args[p + 1] == dq) {
+ // Two consecutive quotes make a literal quote.
+ // This is not documented on MSDN.
+ ++p;
+ } else {
+ // Closing quote
+ copy = false;
+ inquote = !inquote;
+ }
+ } else {
+ // Opening quote
+ copy = false;
+ inquote = !inquote;
+ }
+ }
+ bslashes /= 2;
+ }
+
+ while (--bslashes >= 0)
+ {
+ arg.append(bs);
+ }
+
+ if (p == length || (!inquote && isWhiteSpace(args[p].unicode())))
+ {
+ ret.append(arg);
+ if (inquote) {
+ if (err) {
+ *err = BadQuoting;
+ }
+ return QStringList();
+ }
+ break;
+ }
+
+ if (copy)
+ {
+ arg.append(args[p]);
+ }
+ ++p;
+ }
+ }
+ //not reached
+}
+
+QString KShell::quoteArgInternal(const QString &arg, bool _inquote)
+{
+ // Escape quotes, preceding backslashes are doubled. Surround with quotes.
+ // Note that cmd does not understand quote escapes in quoted strings,
+ // so the quoting needs to be "suspended".
+ const QLatin1Char bs('\\'), dq('\"');
+ QString ret;
+ bool inquote = _inquote;
+ int bslashes = 0;
+ for (int p = 0; p < arg.length(); p++) {
+ if (arg[p] == bs) {
+ bslashes++;
+ } else if (arg[p] == dq) {
+ if (inquote) {
+ ret.append(dq);
+ inquote = false;
+ }
+ for (; bslashes; bslashes--) {
+ ret.append(QLatin1String("\\\\"));
+ }
+ ret.append(QLatin1String("\\^\""));
+ } else {
+ if (!inquote) {
+ ret.append(dq);
+ inquote = true;
+ }
+ for (; bslashes; bslashes--) {
+ ret.append(bs);
+ }
+ ret.append(arg[p]);
+ }
+ }
+ ret.replace(QLatin1Char('%'), PERCENT_ESCAPE);
+ if (bslashes) {
+ // Ensure that we don't have directly trailing backslashes,
+ // so concatenating with another string won't cause surprises.
+ if (!inquote && !_inquote) {
+ ret.append(dq);
+ }
+ for (; bslashes; bslashes--) {
+ ret.append(QLatin1String("\\\\"));
+ }
+ ret.append(dq);
+ if (inquote && _inquote) {
+ ret.append(dq);
+ }
+ } else if (inquote != _inquote) {
+ ret.append(dq);
+ }
+ return ret;
+}
+
+QString KShell::quoteArg(const QString &arg)
+{
+ if (arg.isEmpty()) {
+ return QString::fromLatin1("\"\"");
+ }
+
+ // Ensure that we don't have directly trailing backslashes,
+ // so concatenating with another string won't cause surprises.
+ if (arg.endsWith(QLatin1Char('\\'))) {
+ return quoteArgInternal(arg, false);
+ }
+
+ for (int x = arg.length() - 1; x >= 0; --x)
+ if (isSpecialChar(arg[x].unicode())) {
+ return quoteArgInternal(arg, false);
+ }
+
+ // Escape quotes. Preceding backslashes are doubled.
+ // Note that the remaining string is not quoted.
+ QString ret(arg);
+ ret.replace(QRegExp(QLatin1String("(\\\\*)\"")), QLatin1String("\\1\\1\\^\""));
+ ret.replace(QLatin1Char('%'), PERCENT_ESCAPE);
+ return ret;
+}
+
--- /dev/null
+/*
+ * KUser - represent a user/account
+ * Copyright (C) 2002-2003 Tim Jansen <tim@tjansen.de>
+ * Copyright (C) 2003 Oswald Buddenhagen <ossi@kde.org>
+ * Copyright (C) 2004 Jan Schaefer <j_schaef@informatik.uni-kl.de>
+ * Copyright (C) 2014 Alex Richardson <arichardson.kde@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+#ifndef KUSER_H
+#define KUSER_H
+
+#include <kcoreaddons_export.h>
+
+#include <QSharedDataPointer>
+#include <QVariant>
+
+class KUserGroup;
+class QString;
+class QStringList;
+template <class T> class QList;
+
+#ifdef Q_OS_WIN
+typedef void *K_UID;
+typedef void *K_GID;
+struct WindowsSIDWrapper;
+#else
+#include <sys/types.h>
+typedef uid_t K_UID;
+typedef gid_t K_GID;
+struct passwd;
+struct group;
+#endif
+
+// The following is to avoid compile errors using msvc, and it is done
+// using a common #define to avoid helpful people accidentally cleaning this
+// not quite pretty thing and breaking it for people on windows.
+// See https://git.reviewboard.kde.org/r/127598/ for details
+#define KCOREADDONS_UINT_MAX (std::numeric_limits<uint>::max)()
+
+/** A platform independent user or group ID.
+ *
+ *
+ * This struct is required since Windows does not have an integer uid_t/gid_t type
+ * but instead uses an opaque binary blob (SID) which must free allocated memory.
+ * On UNIX this is simply a uid_t/gid_t and all operations are inline, so there is
+ * no runtime overhead over using the uid_t/gid_t directly. On Windows this is an implicitly
+ * shared class that frees the underlying SID once no more references remain.
+ *
+ * Unlike KUser/KUserGroup this does not query additional information, it is simply
+ * an abstraction over the native user/group ID type. If more information is necessary, a
+ * KUser or KUserGroup instance can be constructed from this ID
+ *
+ * @internal
+ * @author Alex Richardson <arichardson.kde@gmail.com>
+ */
+template<typename T>
+struct KCOREADDONS_EXPORT KUserOrGroupId {
+ typedef T NativeType;
+protected:
+ /** Creates an invalid KUserOrGroupId */
+ KUserOrGroupId();
+ /** Creates a KUserOrGroupId from a native user/group ID. On windows this will not take
+ * ownership over the passed SID, a copy will be created instead.
+ */
+ explicit KUserOrGroupId(NativeType nativeId);
+ /** Copy constructor. This is very fast, objects can be passed by value */
+ KUserOrGroupId(const KUserOrGroupId<T> &other);
+ KUserOrGroupId &operator=(const KUserOrGroupId<T> &other);
+ ~KUserOrGroupId();
+public:
+ /** @return true if this object references a valid user/group ID.
+ * @note If this returns true it doesn't necessarily mean that the referenced user/group exists,
+ * it only checks whether this value could be a valid user/group ID.
+ */
+ bool isValid() const;
+ /**
+ * @return A user/group ID that can be used in operating system specific functions
+ * @note On Windows the returned pointer will be freed once the last KUserOrGroupId referencing
+ * this user/group ID is deleted. Make sure that the KUserOrGroupId object remains valid as
+ * long as the native pointer is needed.
+ */
+ NativeType nativeId() const;
+ /** @return A string representation of this user ID, not the name of the user
+ * On UNIX this is a simple integer, e.g. "0" for root. On Windows this is a string
+ * like e.g. "S-1-5-32-544" for the Administrators group
+ */
+ QString toString() const;
+ /** @return whether this KUserOrGroupId is equal to @p other */
+ bool operator==(const KUserOrGroupId &other) const;
+ /** @return whether this KUserOrGroupId is not equal to @p other */
+ bool operator!=(const KUserOrGroupId &other) const;
+private:
+#ifdef Q_OS_WIN
+ QExplicitlySharedDataPointer<WindowsSIDWrapper> data;
+#else
+ NativeType id;
+#endif
+};
+
+#ifdef Q_OS_WIN
+template<> KUserOrGroupId<void *>::KUserOrGroupId();
+template<> KUserOrGroupId<void *>::~KUserOrGroupId();
+template<> KUserOrGroupId<void *>::KUserOrGroupId(KUserOrGroupId::NativeType nativeId);
+template<> KUserOrGroupId<void *>::KUserOrGroupId(const KUserOrGroupId &other);
+template<> KUserOrGroupId<void *>& KUserOrGroupId<void *>::operator=(const KUserOrGroupId &other);
+template<> bool KUserOrGroupId<void *>::isValid() const;
+template<> KUserOrGroupId<void *>::NativeType KUserOrGroupId<void *>::nativeId() const;
+template<> QString KUserOrGroupId<void *>::toString() const;
+template<> bool KUserOrGroupId<void *>::operator==(const KUserOrGroupId &other) const;
+template<> bool KUserOrGroupId<void *>::operator!=(const KUserOrGroupId &other) const;
+#endif
+
+/** A platform independent user ID.
+ * @see KUserOrGroupId
+ * @since 5.0
+ * @author Alex Richardson <arichardson.kde@gmail.com>
+ */
+struct KCOREADDONS_EXPORT KUserId : public KUserOrGroupId<K_UID> {
+ /** Creates an invalid KUserId */
+ KUserId() {}
+ /** Creates an KUserId from the native user ID type */
+ explicit KUserId(K_UID uid) : KUserOrGroupId(uid) {}
+ KUserId(const KUserId &other) : KUserOrGroupId(other) {}
+ ~KUserId() {}
+ /** @return a KUserId for the user with name @p name, or an invalid KUserId if no
+ * user with this name was found on the system
+ */
+ static KUserId fromName(const QString &name);
+ /** @return a KUserId for the current user. This is like ::getuid() on UNIX. */
+ static KUserId currentUserId();
+ /** @return a KUserId for the current effective user. This is like ::geteuid() on UNIX.
+ * @note Windows does not have setuid binaries, so on Windows this will always be the same
+ * as KUserId::currentUserId()
+ */
+ static KUserId currentEffectiveUserId();
+};
+
+/** A platform independent group ID.
+ * @see KUserOrGroupId
+ * @since 5.0
+ * @author Alex Richardson <arichardson.kde@gmail.com>
+ */
+struct KCOREADDONS_EXPORT KGroupId : public KUserOrGroupId<K_GID> {
+ /** Creates an invalid KGroupId */
+ KGroupId() {}
+ /** Creates an KGroupId from the native group ID type */
+ explicit KGroupId(K_GID gid) : KUserOrGroupId(gid) {}
+ KGroupId(const KGroupId &other) : KUserOrGroupId(other) {}
+ ~KGroupId() {}
+ /** @return A KGroupId for the user with name @p name, or an invalid KGroupId if no
+ * user with this name was found on the system
+ */
+ static KGroupId fromName(const QString &name);
+ /** @return a KGroupId for the current user. This is like ::getgid() on UNIX. */
+ static KGroupId currentGroupId();
+ /** @return a KGroupId for the current effective user. This is like ::getegid() on UNIX.
+ * @note Windows does not have setuid binaries, so on Windows this will always be the same
+ * as KGroupId::currentGroupId()
+ */
+ static KGroupId currentEffectiveGroupId();
+};
+
+#ifndef Q_OS_WIN
+inline uint qHash(const KUserId &id, uint seed = 0)
+{
+ return qHash(id.nativeId(), seed);
+}
+inline uint qHash(const KGroupId &id, uint seed = 0)
+{
+ return qHash(id.nativeId(), seed);
+}
+#else
+// can't be inline on windows, because we would need to include windows.h (which can break code)
+KCOREADDONS_EXPORT uint qHash(const KUserId &id, uint seed = 0);
+KCOREADDONS_EXPORT uint qHash(const KGroupId &id, uint seed = 0);
+#endif
+
+/**
+ * \class KUser kuser.h <KUser>
+ *
+ * @short Represents a user on your system
+ *
+ * This class represents a user on your system. You can either get
+ * information about the current user, of fetch information about
+ * a user on the system. Instances of this class will be explicitly shared,
+ * so copying objects is very cheap and you can safely pass objects by value.
+ *
+ * @author Tim Jansen <tim@tjansen.de>
+ */
+class KCOREADDONS_EXPORT KUser
+{
+
+public:
+
+ enum UIDMode {
+ UseEffectiveUID, ///< Use the effective user id.
+ UseRealUserID ///< Use the real user id.
+ };
+
+ /**
+ * Creates an object that contains information about the current user.
+ * (as returned by getuid(2) or geteuid(2), taking $LOGNAME/$USER into
+ * account).
+ * @param mode if #UseEffectiveUID is passed the effective
+ * user is returned.
+ * If #UseRealUserID is passed the real user will be
+ * returned.
+ * The real UID will be different than the effective UID in setuid
+ * programs; in
+ * such a case use the effective UID for checking permissions, and
+ * the real UID for displaying information about the user.
+ */
+ explicit KUser(UIDMode mode = UseEffectiveUID);
+
+ /**
+ * Creates an object for the user with the given user id.
+ * If the user does not exist isValid() will return false.
+ * @param uid the user id
+ */
+ explicit KUser(K_UID uid);
+
+ /**
+ * Creates an object for the user with the given user id.
+ * If the KUserId object is invalid this one will be, too.
+ * @param uid the user id
+ */
+ explicit KUser(KUserId uid);
+
+ /**
+ * Creates an object that contains information about the user with the given
+ * name. If the user does not exist isValid() will return false.
+ *
+ * @param name the name of the user
+ */
+ explicit KUser(const QString &name);
+
+ /**
+ * Creates an object that contains information about the user with the given
+ * name. If the user does not exist isValid() will return false.
+ *
+ * @param name the name of the user
+ */
+ explicit KUser(const char *name);
+
+#ifndef Q_OS_WIN
+ /**
+ * Creates an object from a passwd structure.
+ * If the pointer is null isValid() will return false.
+ *
+ * @param p the passwd structure to create the user from
+ */
+ explicit KUser(const passwd *p);
+#endif
+
+ /**
+ * Creates an object from another KUser object
+ * @param user the user to create the new object from
+ */
+ KUser(const KUser &user);
+
+ /**
+ * Copies a user
+ * @param user the user to copy
+ * @return this object
+ */
+ KUser &operator =(const KUser &user);
+
+ /**
+ * Two KUser objects are equal if the userId() are identical.
+ * Invalid users never compare equal.
+ */
+ bool operator ==(const KUser &user) const;
+
+ /**
+ * Two KUser objects are not equal if userId() are not identical.
+ * Invalid users always compare unequal.
+ */
+ bool operator !=(const KUser &user) const;
+
+ /**
+ * Returns true if the user is valid. A KUser object can be invalid if
+ * you created it with an non-existing uid or name.
+ * @return true if the user is valid
+ */
+ bool isValid() const;
+
+ /** @return the native user id of the user. */
+ KUserId userId() const;
+
+ /** @return the native user id of the user. */
+ KGroupId groupId() const;
+
+#ifndef KCOREADDONS_NO_DEPRECATED
+ /**
+ * Returns the group id of the user.
+ * @return the id of the group or -1 if user is invalid
+ * @deprecated since 5.0 use KUser::groupId()
+ */
+ KCOREADDONS_DEPRECATED K_GID gid() const
+ {
+ return groupId().nativeId();
+ }
+#endif
+
+ /**
+ * Checks whether the user is the super user (root).
+ * @return true if the user is root
+ */
+ bool isSuperUser() const;
+
+ /**
+ * The login name of the user.
+ * @return the login name of the user or QString() if user is invalid
+ */
+ QString loginName() const;
+
+ /**
+ * The full name of the user.
+ * @return the full name of the user or QString() if user is invalid
+ * @deprecated use property(KUser::FullName) instead
+ */
+#ifndef KCOREADDONS_NO_DEPRECATED
+ KCOREADDONS_DEPRECATED QString fullName() const
+ {
+ return property(FullName).toString();
+ }
+ /**
+ * Returns the user id of the user.
+ * @return the id of the user or -1 (UNIX)/ null(Windows) if user is invalid
+ * @deprecated since 5.0 use KUser::userId()
+ */
+ KCOREADDONS_DEPRECATED K_UID uid() const
+ {
+ return userId().nativeId();
+ }
+#endif
+
+ /**
+ * The path to the user's home directory.
+ * @return the home directory of the user or QString() if the
+ * user is invalid
+ */
+ QString homeDir() const;
+
+ /**
+ * The path to the user's face file.
+ * @return the path to the user's face file or QString() if no
+ * face has been set
+ */
+ QString faceIconPath() const;
+
+ /**
+ * The path to the user's login shell.
+ * @return the login shell of the user or QString() if the
+ * user is invalid
+ */
+ QString shell() const;
+
+ /**
+ * @param maxCount the maximum number of groups to return
+ * @return all groups of the user
+ */
+ QList<KUserGroup> groups(uint maxCount = KCOREADDONS_UINT_MAX) const;
+
+ /**
+ * @param maxCount the maximum number of groups to return
+ * @return all group names of the user
+ */
+ QStringList groupNames(uint maxCount = KCOREADDONS_UINT_MAX) const;
+
+ enum UserProperty { FullName, RoomNumber, WorkPhone, HomePhone };
+
+ /**
+ * Returns an extended property.
+ *
+ * Under Windows, @p RoomNumber, @p WorkPhone and @p HomePhone are unsupported.
+ *
+ * @return a QVariant with the value of the property or an invalid QVariant,
+ * if the property is not set
+ */
+ QVariant property(UserProperty which) const;
+
+ /**
+ * Destructor.
+ */
+ ~KUser();
+
+ /**
+ * @param maxCount the maximum number of users to return
+ * @return all users of the system.
+ */
+ static QList<KUser> allUsers(uint maxCount = KCOREADDONS_UINT_MAX);
+
+ /**
+ * @param maxCount the maximum number of users to return
+ * @return all user names of the system.
+ */
+ static QStringList allUserNames(uint maxCount = KCOREADDONS_UINT_MAX);
+
+private:
+ class Private;
+ QExplicitlySharedDataPointer<Private> d;
+};
+
+/**
+ * \class KUserGroup kuser.h <KUserGroup>
+ *
+ * @short Represents a group on your system
+ *
+ * This class represents a group on your system. You can either get
+ * information about the group of the current user, of fetch information about
+ * a group on the system. Instances of this class will be explicitly shared,
+ * so copying objects is very cheap and you can safely pass objects by value.
+ *
+ * @author Jan Schaefer <j_schaef@informatik.uni-kl.de>
+ */
+class KCOREADDONS_EXPORT KUserGroup
+{
+
+public:
+
+ /**
+ * Create an object from a group name.
+ * If the group does not exist, isValid() will return false.
+ * @param name the name of the group
+ */
+ explicit KUserGroup(const QString &name);
+
+ /**
+ * Create an object from a group name.
+ * If the group does not exist, isValid() will return false.
+ * @param name the name of the group
+ */
+ explicit KUserGroup(const char *name);
+
+ /**
+ * Creates an object for the group with the given group id.
+ * If the KGroupId object is invalid this one will be, too.
+ * @param gid the group id
+ */
+ explicit KUserGroup(KGroupId gid);
+
+ /**
+ * Create an object from the group of the current user.
+ * @param mode if #KUser::UseEffectiveUID is passed the effective user
+ * will be used. If #KUser::UseRealUserID is passed the real user
+ * will be used.
+ * The real UID will be different than the effective UID in setuid
+ * programs; in such a case use the effective UID for checking
+ * permissions, and the real UID for displaying information about
+ * the group associated with the user.
+ */
+ explicit KUserGroup(KUser::UIDMode mode = KUser::UseEffectiveUID);
+
+ /**
+ * Create an object from a group id.
+ * If the group does not exist, isValid() will return false.
+ * @param gid the group id
+ */
+ explicit KUserGroup(K_GID gid);
+
+#ifndef Q_OS_WIN
+ /**
+ * Creates an object from a group structure.
+ * If the pointer is null, isValid() will return false.
+ * @param g the group structure to create the group from.
+ */
+ explicit KUserGroup(const group *g);
+#endif
+
+ /**
+ * Creates a new KUserGroup instance from another KUserGroup object
+ * @param group the KUserGroup to copy
+ */
+ KUserGroup(const KUserGroup &group);
+
+ /**
+ * Copies a group
+ * @param group the group that should be copied
+ * @return this group
+ */
+ KUserGroup &operator =(const KUserGroup &group);
+
+ /**
+ * Two KUserGroup objects are equal if their gid()s are identical.
+ * Invalid groups never compare equal.
+ * @return true if the groups are identical
+ */
+ bool operator ==(const KUserGroup &group) const;
+
+ /**
+ * Two KUserGroup objects are not equal if their gid()s are not identical.
+ * Invalid groups always compare unequal.
+ * @return true if the groups are not identical
+ */
+ bool operator !=(const KUserGroup &group) const;
+
+ /**
+ * Returns whether the group is valid.
+ * A KUserGroup object can be invalid if it is
+ * created with a non-existing gid or name.
+ * @return true if the group is valid
+ */
+ bool isValid() const;
+
+#ifndef KCOREADDONS_NO_DEPRECATED
+ /**
+ * Returns the group id of the group.
+ * @return the group id of the group or -1 if the group is invalid
+ * @deprecated since 5.0 use KUserGroup::groupId()
+ */
+ KCOREADDONS_DEPRECATED K_GID gid() const
+ {
+ return groupId().nativeId();
+ }
+#endif
+
+ /** @return the native group id of the user. */
+ KGroupId groupId() const;
+
+ /**
+ * The name of the group.
+ * @return the name of the group
+ */
+ QString name() const;
+
+ /**
+ * @param maxCount the maximum number of users to return
+ * @return a list of all users of the group
+ */
+ QList<KUser> users(uint maxCount = KCOREADDONS_UINT_MAX) const;
+
+ /**
+ * @param maxCount the maximum number of groups to return
+ * @return a list of all user login names of the group
+ */
+ QStringList userNames(uint maxCount = KCOREADDONS_UINT_MAX) const;
+
+ /**
+ * Destructor.
+ */
+ ~KUserGroup();
+
+ /**
+ * @param maxCount the maximum number of groups to return
+ * @return a list of all groups on this system
+ */
+ static QList<KUserGroup> allGroups(uint maxCount = KCOREADDONS_UINT_MAX);
+
+ /**
+ * @param maxCount the maximum number of groups to return
+ * @return a list of all group names on this system
+ */
+ static QStringList allGroupNames(uint maxCount = KCOREADDONS_UINT_MAX);
+
+private:
+ class Private;
+ QSharedDataPointer<Private> d;
+};
+
+#if !defined(Q_OS_WIN)
+// inline UNIX implementation of KUserOrGroupId
+template<typename T>
+inline bool KUserOrGroupId<T>::isValid() const
+{
+ return id != NativeType(-1);
+}
+template<typename T>
+inline bool KUserOrGroupId<T>::operator==(const KUserOrGroupId<T> &other) const
+{
+ return id == other.id;
+}
+template<typename T>
+inline bool KUserOrGroupId<T>::operator!=(const KUserOrGroupId<T> &other) const
+{
+ return id != other.id;
+}
+template<typename T>
+inline typename KUserOrGroupId<T>::NativeType KUserOrGroupId<T>::nativeId() const
+{
+ return id;
+}
+template<typename T>
+inline QString KUserOrGroupId<T>::toString() const
+{
+ return QString::number(id);
+}
+template<typename T>
+inline KUserOrGroupId<T>::KUserOrGroupId()
+ : id(-1)
+{
+}
+template<typename T>
+inline KUserOrGroupId<T>::KUserOrGroupId(KUserOrGroupId<T>::NativeType nativeId)
+ : id(nativeId)
+{
+}
+template<typename T>
+inline KUserOrGroupId<T>::KUserOrGroupId(const KUserOrGroupId<T> &other)
+ : id(other.id)
+{
+}
+template<typename T>
+inline KUserOrGroupId<T> &KUserOrGroupId<T>::operator=(const KUserOrGroupId<T> &other)
+{
+ id = other.id;
+ return *this;
+}
+template<typename T>
+inline KUserOrGroupId<T>::~KUserOrGroupId()
+{
+}
+#endif // !defined(Q_OS_WIN)
+
+inline bool KUser::operator!=(const KUser &other) const
+{
+ return !operator==(other);
+}
+
+inline bool KUserGroup::operator!=(const KUserGroup &other) const
+{
+ return !operator==(other);
+}
+
+#endif
--- /dev/null
+/*
+ * KUser - represent a user/account
+ * Copyright (C) 2002 Tim Jansen <tim@tjansen.de>
+ * Copyright (C) 2014 Alex Richardson <arichardson.kde@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "kuser.h"
+#include "config-getgrouplist.h"
+#include "config-accountsservice.h"
+
+#include <QMutableStringListIterator>
+#include <QDir>
+#include <QFileInfo>
+
+#include <pwd.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <grp.h>
+#include <errno.h>
+
+#include <algorithm> // std::find
+#include <functional> // std::function
+
+#if defined(__BIONIC__)
+static inline struct passwd * getpwent() { return nullptr; }
+inline void setpwent() { }
+static inline void setgrent() { }
+static inline struct group * getgrent() { return nullptr; }
+inline void endpwent() { }
+static inline void endgrent() { }
+#endif
+
+class Q_DECL_HIDDEN KUser::Private : public QSharedData
+{
+public:
+ uid_t uid;
+ gid_t gid;
+ QString loginName;
+ QString homeDir, shell;
+ QMap<UserProperty, QVariant> properties;
+
+ Private() : uid(uid_t(-1)), gid(gid_t(-1)) {}
+ Private(const char *name) : uid(uid_t(-1)), gid(gid_t(-1))
+ {
+ fillPasswd(name ? ::getpwnam(name) : nullptr);
+ }
+ Private(const passwd *p) : uid(uid_t(-1)), gid(gid_t(-1))
+ {
+ fillPasswd(p);
+ }
+
+ void fillPasswd(const passwd *p)
+ {
+ if (p) {
+#ifndef __BIONIC__
+ QString gecos = QString::fromLocal8Bit(p->pw_gecos);
+#else
+ QString gecos = QString();
+#endif
+ QStringList gecosList = gecos.split(QLatin1Char(','));
+ // fill up the list, should be at least 4 entries
+ while (gecosList.size() < 4) {
+ gecosList << QString();
+ }
+
+ uid = p->pw_uid;
+ gid = p->pw_gid;
+ loginName = QString::fromLocal8Bit(p->pw_name);
+ properties[KUser::FullName] = QVariant(gecosList[0]);
+ properties[KUser::RoomNumber] = QVariant(gecosList[1]);
+ properties[KUser::WorkPhone] = QVariant(gecosList[2]);
+ properties[KUser::HomePhone] = QVariant(gecosList[3]);
+ if (uid == ::getuid() && uid == ::geteuid()) {
+ homeDir = QFile::decodeName(qgetenv("HOME"));
+ }
+ if (homeDir.isEmpty()) {
+ homeDir = QFile::decodeName(p->pw_dir);
+ }
+ shell = QString::fromLocal8Bit(p->pw_shell);
+ }
+ }
+};
+
+KUser::KUser(UIDMode mode)
+{
+ uid_t _uid = ::getuid(), _euid;
+ if (mode == UseEffectiveUID && (_euid = ::geteuid()) != _uid) {
+ d = new Private(::getpwuid(_euid));
+ } else {
+ d = new Private(qgetenv("LOGNAME").constData());
+ if (d->uid != _uid) {
+ d = new Private(qgetenv("USER").constData());
+ if (d->uid != _uid) {
+ d = new Private(::getpwuid(_uid));
+ }
+ }
+ }
+}
+
+KUser::KUser(K_UID _uid)
+ : d(new Private(::getpwuid(_uid)))
+{
+}
+
+KUser::KUser(KUserId _uid)
+ : d(new Private(::getpwuid(_uid.nativeId())))
+{
+}
+
+KUser::KUser(const QString &name)
+ : d(new Private(name.toLocal8Bit().data()))
+{
+}
+
+KUser::KUser(const char *name)
+ : d(new Private(name))
+{
+}
+
+KUser::KUser(const passwd *p)
+ : d(new Private(p))
+{
+}
+
+KUser::KUser(const KUser &user)
+ : d(user.d)
+{
+}
+
+KUser &KUser::operator =(const KUser &user)
+{
+ d = user.d;
+ return *this;
+}
+
+bool KUser::operator ==(const KUser &user) const
+{
+ return isValid() && (d->uid == user.d->uid);
+}
+
+bool KUser::isValid() const
+{
+ return d->uid != uid_t(-1);
+}
+
+KUserId KUser::userId() const
+{
+ return KUserId(d->uid);
+}
+
+KGroupId KUser::groupId() const
+{
+ return KGroupId(d->gid);
+}
+
+bool KUser::isSuperUser() const
+{
+ return d->uid == 0;
+}
+
+QString KUser::loginName() const
+{
+ return d->loginName;
+}
+
+QString KUser::homeDir() const
+{
+ return d->homeDir;
+}
+
+QString KUser::faceIconPath() const
+{
+ QString pathToFaceIcon;
+ if (!d->loginName.isEmpty()) {
+ pathToFaceIcon = QStringLiteral(ACCOUNTS_SERVICE_ICON_DIR) + QLatin1Char('/') + d->loginName;
+ }
+
+ if (QFile::exists(pathToFaceIcon)) {
+ return pathToFaceIcon;
+ }
+
+ pathToFaceIcon = QString(homeDir() + QLatin1Char('/') + QStringLiteral(".face.icon"));
+
+ if (QFileInfo(pathToFaceIcon).isReadable()) {
+ return pathToFaceIcon;
+ }
+
+ return QString();
+}
+
+QString KUser::shell() const
+{
+ return d->shell;
+}
+
+template<class Func>
+static void listGroupsForUser(const char *name, gid_t gid, uint maxCount, Func handleNextGroup)
+{
+ if (Q_UNLIKELY(maxCount == 0)) {
+ return;
+ }
+ uint found = 0;
+#if HAVE_GETGROUPLIST
+ QVarLengthArray<gid_t, 100> gid_buffer;
+ gid_buffer.resize(100);
+ int numGroups = gid_buffer.size();
+ int result = getgrouplist(name, gid, gid_buffer.data(), &numGroups);
+ if (result < 0 && uint(numGroups) < maxCount) {
+ // getgrouplist returns -1 if the buffer was too small to store all entries, the required size is in numGroups
+ qDebug("Buffer was too small: %d, need %d", gid_buffer.size(), numGroups);
+ gid_buffer.resize(numGroups);
+ numGroups = gid_buffer.size();
+ getgrouplist(name, gid, gid_buffer.data(), &numGroups);
+ }
+ for (int i = 0; i < numGroups && found < maxCount; ++i) {
+ struct group *g = getgrgid(gid_buffer[i]);
+ // should never be null, but better be safe than crash
+ if (g) {
+ found++;
+ handleNextGroup(g);
+ }
+ }
+#else
+ // fall back to getgrent() and reading gr->gr_mem
+ // This is slower than getgrouplist, but works as well
+ // add the current gid, this is often not part of g->gr_mem (e.g. build.kde.org or my openSuSE 13.1 system)
+ struct group *g = getgrgid(gid);
+ if (g) {
+ handleNextGroup(g);
+ found++;
+ if (found >= maxCount) {
+ return;
+ }
+ }
+
+ static const auto groupContainsUser = [](struct group * g, const char *name) -> bool {
+ for (char **user = g->gr_mem; *user; user++)
+ {
+ if (strcmp(name, *user) == 0) {
+ return true;
+ }
+ }
+ return false;
+ };
+
+ setgrent();
+ while ((g = getgrent())) {
+ // don't add the current gid again
+ if (g->gr_gid != gid && groupContainsUser(g, name)) {
+ handleNextGroup(g);
+ found++;
+ if (found >= maxCount) {
+ break;
+ }
+ }
+ }
+ endgrent();
+#endif
+}
+
+QList<KUserGroup> KUser::groups(uint maxCount) const
+{
+ QList<KUserGroup> result;
+ listGroupsForUser(
+ d->loginName.toLocal8Bit().constData(), d->gid, maxCount,
+ [&](const group * g) {
+ result.append(KUserGroup(g));
+ }
+ );
+ return result;
+}
+
+QStringList KUser::groupNames(uint maxCount) const
+{
+ QStringList result;
+ listGroupsForUser(
+ d->loginName.toLocal8Bit().constData(), d->gid, maxCount,
+ [&](const group * g) {
+ result.append(QString::fromLocal8Bit(g->gr_name));
+ }
+ );
+ return result;
+}
+
+QVariant KUser::property(UserProperty which) const
+{
+ return d->properties.value(which);
+}
+
+QList<KUser> KUser::allUsers(uint maxCount)
+{
+ QList<KUser> result;
+
+ passwd *p;
+ setpwent();
+
+ for (uint i = 0; i < maxCount && (p = getpwent()); ++i) {
+ result.append(KUser(p));
+ }
+
+ endpwent();
+
+ return result;
+}
+
+QStringList KUser::allUserNames(uint maxCount)
+{
+ QStringList result;
+
+ passwd *p;
+ setpwent();
+
+ for (uint i = 0; i < maxCount && (p = getpwent()); ++i) {
+ result.append(QString::fromLocal8Bit(p->pw_name));
+ }
+
+ endpwent();
+ return result;
+}
+
+KUser::~KUser()
+{
+}
+
+class Q_DECL_HIDDEN KUserGroup::Private : public QSharedData
+{
+public:
+ gid_t gid;
+ QString name;
+
+ Private() : gid(gid_t(-1)) {}
+ Private(const char *_name) : gid(gid_t(-1))
+ {
+ fillGroup(_name ? ::getgrnam(_name) : nullptr);
+ }
+ Private(const ::group *p) : gid(gid_t(-1))
+ {
+ fillGroup(p);
+ }
+
+ void fillGroup(const ::group *p)
+ {
+ if (p) {
+ gid = p->gr_gid;
+ name = QString::fromLocal8Bit(p->gr_name);
+ }
+ }
+};
+
+KUserGroup::KUserGroup(KUser::UIDMode mode)
+{
+ d = new Private(getgrgid(KUser(mode).groupId().nativeId()));
+}
+
+KUserGroup::KUserGroup(K_GID _gid)
+ : d(new Private(getgrgid(_gid)))
+{
+}
+
+KUserGroup::KUserGroup(KGroupId _gid)
+ : d(new Private(getgrgid(_gid.nativeId())))
+{
+}
+
+KUserGroup::KUserGroup(const QString &_name)
+ : d(new Private(_name.toLocal8Bit().data()))
+{
+}
+
+KUserGroup::KUserGroup(const char *_name)
+ : d(new Private(_name))
+{
+}
+
+KUserGroup::KUserGroup(const ::group *g)
+ : d(new Private(g))
+{
+}
+
+KUserGroup::KUserGroup(const KUserGroup &group)
+ : d(group.d)
+{
+}
+
+KUserGroup &KUserGroup::operator =(const KUserGroup &group)
+{
+ d = group.d;
+ return *this;
+}
+
+bool KUserGroup::operator ==(const KUserGroup &group) const
+{
+ return isValid() && (d->gid == group.d->gid);
+}
+
+bool KUserGroup::isValid() const
+{
+ return d->gid != gid_t(-1);
+}
+
+KGroupId KUserGroup::groupId() const
+{
+ return KGroupId(d->gid);
+}
+
+QString KUserGroup::name() const
+{
+ return d->name;
+}
+
+static void listGroupMembers(gid_t gid, uint maxCount, std::function<void(passwd *)> handleNextGroupUser)
+{
+ if (maxCount == 0) {
+ return;
+ }
+ struct group *g = getgrgid(gid);
+ if (!g) {
+ return;
+ }
+ uint found = 0;
+ QVarLengthArray<uid_t> addedUsers;
+ struct passwd *p = nullptr;
+ for (char **user = g->gr_mem; *user; user++) {
+ if ((p = getpwnam(*user))) {
+ addedUsers.append(p->pw_uid);
+ handleNextGroupUser(p);
+ found++;
+ if (found >= maxCount) {
+ break;
+ }
+ }
+ }
+
+ //gr_mem doesn't contain users where the primary group == gid -> we have to iterate over all users
+ setpwent();
+ while ((p = getpwent()) && found < maxCount) {
+ if (p->pw_gid != gid) {
+ continue; // only need primary gid since otherwise gr_mem already contains this user
+ }
+ // make sure we don't list a user twice
+ if (std::find(addedUsers.cbegin(), addedUsers.cend(), p->pw_uid) == addedUsers.cend()) {
+ handleNextGroupUser(p);
+ found++;
+ }
+ }
+ endpwent();
+}
+
+QList<KUser> KUserGroup::users(uint maxCount) const
+{
+ QList<KUser> result;
+ listGroupMembers(d->gid, maxCount, [&](const passwd *p) {
+ result.append(KUser(p));
+ });
+ return result;
+}
+
+QStringList KUserGroup::userNames(uint maxCount) const
+{
+ QStringList result;
+ listGroupMembers(d->gid, maxCount, [&](const passwd *p) {
+ result.append(QString::fromLocal8Bit(p->pw_name));
+ });
+ return result;
+}
+
+QList<KUserGroup> KUserGroup::allGroups(uint maxCount)
+{
+ QList<KUserGroup> result;
+
+ ::group *g;
+ setgrent();
+
+ for (uint i = 0; i < maxCount && (g = getgrent()); ++i) {
+ result.append(KUserGroup(g));
+ }
+
+ endgrent();
+
+ return result;
+}
+
+QStringList KUserGroup::allGroupNames(uint maxCount)
+{
+ QStringList result;
+
+ ::group *g;
+ setgrent();
+
+ for (uint i = 0; i < maxCount && (g = getgrent()); ++i) {
+ result.append(QString::fromLocal8Bit(g->gr_name));
+ }
+
+ endgrent();
+
+ return result;
+}
+
+KUserGroup::~KUserGroup()
+{
+}
+
+KUserId KUserId::fromName(const QString &name)
+{
+ if (name.isEmpty()) {
+ return KUserId();
+ }
+ QByteArray name8Bit = name.toLocal8Bit();
+ struct passwd *p = ::getpwnam(name8Bit.constData());
+ if (!p) {
+ qWarning("Failed to lookup user %s: %s", name8Bit.constData(), strerror(errno));
+ return KUserId();
+ }
+ return KUserId(p->pw_uid);
+}
+
+KGroupId KGroupId::fromName(const QString &name)
+{
+ if (name.isEmpty()) {
+ return KGroupId();
+ }
+ QByteArray name8Bit = name.toLocal8Bit();
+ struct group *g = ::getgrnam(name8Bit.constData());
+ if (!g) {
+ qWarning("Failed to lookup group %s: %s", name8Bit.constData(), strerror(errno));
+ return KGroupId();
+ }
+ return KGroupId(g->gr_gid);
+}
+
+KUserId KUserId::currentUserId()
+{
+ return KUserId(getuid());
+}
+
+KUserId KUserId::currentEffectiveUserId()
+{
+ return KUserId(geteuid());
+}
+
+KGroupId KGroupId::currentGroupId()
+{
+ return KGroupId(getgid());
+}
+
+KGroupId KGroupId::currentEffectiveGroupId()
+{
+ return KGroupId(getegid());
+}
--- /dev/null
+/*
+ * KUser - represent a user/account (Windows)
+ * Copyright (C) 2007 Bernhard Loos <nhuh.put@web.de>
+ * Copyright (C) 2014 Alex Richardson <arichardson.kde@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "kuser.h"
+
+#include "kcoreaddons_debug.h"
+#include <QDir>
+#include <QStandardPaths>
+
+#include <memory> // unique_ptr
+#include <type_traits>
+
+#include <qt_windows.h>
+#include <lm.h> //Net*
+#include <userenv.h> //GetProfilesDirectoryW
+#include <sddl.h> //ConvertSidToStringSidW
+#include <shlobj.h>
+
+// this can't be a lambda due to a MSVC2012 bug
+// (works fine in 2010 and 2013)
+struct netApiBufferDeleter {
+ void operator()(void *buffer)
+ {
+ if (buffer) {
+ NetApiBufferFree(buffer);
+ }
+ }
+};
+
+template<typename T>
+class ScopedNetApiBuffer : public std::unique_ptr<T, netApiBufferDeleter>
+{
+public:
+ // explicit scope resolution operator needed in ::netApiBufferDeleter
+ // because of *another* MSVC bug :(
+ inline explicit ScopedNetApiBuffer(T *data)
+ : std::unique_ptr<T, ::netApiBufferDeleter>(data, ::netApiBufferDeleter()) {}
+};
+
+const auto handleCloser = [](HANDLE h)
+{
+ if (h != INVALID_HANDLE_VALUE) {
+ CloseHandle(h);
+ }
+};
+typedef std::unique_ptr<std::remove_pointer<HANDLE>::type, decltype(handleCloser)> ScopedHANDLE;
+
+/** Make sure the NetApi functions are called with the correct level argument (for template functions)
+* This argument can be retrieved by using NetApiTypeInfo<T>::level. In order to do so the type must be
+* registered by writing e.g. NETAPI_TYPE_INFO(GROUP_INFO, 0) for GROUP_INFO_0
+*/
+template<typename T> struct NetApiTypeInfo {};
+#define NETAPI_TYPE_INFO(prefix, n) template<> struct NetApiTypeInfo<prefix##_##n> { enum { level = n }; };
+NETAPI_TYPE_INFO(GROUP_INFO, 0)
+NETAPI_TYPE_INFO(GROUP_INFO, 3)
+NETAPI_TYPE_INFO(USER_INFO, 0)
+NETAPI_TYPE_INFO(USER_INFO, 4)
+NETAPI_TYPE_INFO(USER_INFO, 11)
+NETAPI_TYPE_INFO(GROUP_USERS_INFO, 0)
+
+// T must be a USER_INFO_* structure
+template<typename T>
+ScopedNetApiBuffer<T> getUserInfo(LPCWSTR server, const QString &userName, NET_API_STATUS *errCode)
+{
+ LPBYTE userInfoTmp = nullptr;
+ // if level = 11 a USER_INFO_11 structure gets filled in and allocated by NetUserGetInfo(), etc.
+ NET_API_STATUS status = NetUserGetInfo(server, (LPCWSTR)userName.utf16(), NetApiTypeInfo<T>::level, &userInfoTmp);
+ if (status != NERR_Success) {
+ userInfoTmp = nullptr;
+ }
+ if (errCode) {
+ *errCode = status;
+ }
+ return ScopedNetApiBuffer<T>((T*)userInfoTmp);
+}
+
+//enumeration functions
+/** simplify calling the Net*Enum functions to prevent copy and paste for allUsers(), allUserNames(), allGroups(), allGroupNames()
+* @tparam T The type that is enumerated (e.g. USER_INFO_11) Must be registered using NETAPI_TYPE_INFO.
+* @param callback Callback for each listed object. Signature: void(const T&)
+* @param enumFunc This function enumerates the data using a Net* function.
+* It will be called in a loop as long as it returns ERROR_MORE_DATA.
+*
+*/
+template<class T, class Callback, class EnumFunction>
+static void netApiEnumerate(uint maxCount, Callback callback, EnumFunction enumFunc)
+{
+ NET_API_STATUS nStatus = NERR_Success;
+ DWORD_PTR resumeHandle = 0;
+ uint total = 0;
+ int level = NetApiTypeInfo<T>::level;
+ do {
+ LPBYTE buffer = nullptr;
+ DWORD entriesRead = 0;
+ DWORD totalEntries = 0;
+ nStatus = enumFunc(level, &buffer, &entriesRead, &totalEntries, &resumeHandle);
+ //qDebug("Net*Enum(level = %d) returned %d entries, total was (%d), status = %d, resume handle = %llx",
+ // level, entriesRead, totalEntries, nStatus, resumeHandle);
+
+ // buffer must always be freed, even if Net*Enum fails
+ ScopedNetApiBuffer<T> groupInfo((T*)buffer);
+ if (nStatus == NERR_Success || nStatus == ERROR_MORE_DATA) {
+ for (DWORD i = 0; total < maxCount && i < entriesRead; i++, total++) {
+ callback(groupInfo.get()[i]);
+ }
+ } else {
+ qWarning("NetApi enumerate function failed: status = %d", (int)nStatus);
+ }
+ } while (nStatus == ERROR_MORE_DATA);
+}
+
+template<class T, class Callback>
+void enumerateAllUsers(uint maxCount, Callback callback)
+{
+ netApiEnumerate<T>(maxCount, callback, [](int level, LPBYTE *buffer, DWORD *count, DWORD *total, PDWORD_PTR resumeHandle) {
+ // pass 0 as filter -> get all users
+ // Why does this function take a DWORD* as resume handle and NetUserEnum/NetGroupGetUsers a UINT64*
+ // Great API design by Microsoft...
+ //casting the uint64* to uint32* is fine, it just writes to the first 32 bits
+ return NetUserEnum(nullptr, level, 0, buffer, MAX_PREFERRED_LENGTH, count, total, (PDWORD)resumeHandle);
+ });
+}
+
+template<typename T, class Callback>
+void enumerateAllGroups(uint maxCount, Callback callback)
+{
+ netApiEnumerate<T>(maxCount, callback, [](int level, LPBYTE *buffer, DWORD *count, DWORD *total, PDWORD_PTR resumeHandle) {
+ return NetGroupEnum(nullptr, level, buffer, MAX_PREFERRED_LENGTH, count, total, resumeHandle);
+ });
+}
+
+template<typename T, class Callback>
+void enumerateGroupsForUser(uint maxCount, const QString &name, Callback callback)
+{
+ LPCWSTR nameStr = (LPCWSTR)name.utf16();
+ netApiEnumerate<T>(maxCount, callback, [&](int level, LPBYTE *buffer, DWORD *count, DWORD *total, PDWORD_PTR resumeHandle) -> NET_API_STATUS {
+ Q_UNUSED(resumeHandle);
+ NET_API_STATUS ret = NetUserGetGroups(nullptr, nameStr, level, buffer, MAX_PREFERRED_LENGTH, count, total);
+ // if we return ERROR_MORE_DATA here it will result in an endless loop
+ if (ret == ERROR_MORE_DATA) {
+ qCWarning(KCOREADDONS_DEBUG) << "NetUserGetGroups for user" << name << "returned ERROR_MORE_DATA. This should not happen!";
+ ret = NERR_Success;
+ }
+ return ret;
+ });
+}
+
+template<typename T, class Callback>
+void enumerateUsersForGroup(const QString &name, uint maxCount, Callback callback)
+{
+ LPCWSTR nameStr = (LPCWSTR)name.utf16();
+ netApiEnumerate<T>(maxCount, callback, [nameStr](int level, LPBYTE *buffer, DWORD *count, DWORD *total, PDWORD_PTR resumeHandle) {
+ return NetGroupGetUsers(nullptr, nameStr, level, buffer, MAX_PREFERRED_LENGTH, count, total, resumeHandle);
+ });
+}
+
+class Q_DECL_HIDDEN KUser::Private : public QSharedData
+{
+ typedef QExplicitlySharedDataPointer<Private> Ptr;
+ Private() : isAdmin(false) {}
+ //takes ownership over userInfo_
+ Private(KUserId uid, KGroupId gid, const QString &loginName, const QString &fullName,
+ const QString &domain, const QString &homeDir, bool isAdmin)
+ : uid(uid), gid(gid), loginName(loginName), fullName(fullName),
+ domain(domain), homeDir(homeDir), isAdmin(isAdmin)
+ {
+ Q_ASSERT(uid.isValid());
+ }
+ static QString guessHomeDir(const QString &username, KUserId uid)
+ {
+ // usri11_home_dir/usri4_home_dir is often empty
+ // check whether it is the homedir for the current user and if not then fall back to "<user profiles dir>\<user name>"
+ if (uid == KUserId::currentUserId()) {
+ return QDir::homePath();
+ }
+ QString homeDir;
+ WCHAR profileDirPath[MAX_PATH];
+ DWORD bufSize = MAX_PATH;
+ BOOL result = GetProfilesDirectoryW(profileDirPath, &bufSize);
+ if (result) {
+ // This might not be correct: e.g. with local user and domain user with same
+ // In that case it could be C:\Users\Foo (local user) vs C:\Users\Foo.DOMAIN (domain user)
+ // However it is still much better than the previous code which just returned the current users home dir
+ homeDir = QString::fromWCharArray(profileDirPath) + QLatin1Char('\\') + username;
+ }
+ return homeDir;
+ }
+public:
+ static Ptr sharedNull;
+ KUserId uid;
+ KGroupId gid;
+ QString loginName;
+ QString fullName;
+ QString domain;
+ QString homeDir;
+ bool isAdmin;
+
+ /** Creates a user info from a SID (never returns null) */
+ static Ptr create(KUserId uid)
+ {
+ if (!uid.isValid()) {
+ return sharedNull;
+ }
+ // now find the fully qualified name for the user
+ DWORD nameBufferLen = UNLEN + 1;
+ WCHAR nameBuffer[UNLEN + 1];
+ DWORD domainBufferLen = UNLEN + 1;
+ WCHAR domainBuffer[UNLEN + 1];
+ SID_NAME_USE use;
+ if (!LookupAccountSidW(nullptr, uid.nativeId(), nameBuffer, &nameBufferLen, domainBuffer, &domainBufferLen, &use)) {
+ qCWarning(KCOREADDONS_DEBUG) << "Could not lookup user " << uid.toString() << "error =" << GetLastError();
+ return sharedNull;
+ }
+ QString loginName = QString::fromWCharArray(nameBuffer);
+ QString domainName = QString::fromWCharArray(domainBuffer);
+ if (use != SidTypeUser && use != SidTypeDeletedAccount) {
+ qCWarning(KCOREADDONS_DEBUG).nospace()
+ << "SID for " << domainName << "\\" << loginName << " (" << uid.toString()
+ << ") is not of type user (" << SidTypeUser << " or " << SidTypeDeletedAccount
+ << "). Got type " << use << " instead.";
+ return sharedNull;
+ }
+ // now get the server name to query (could be null for local machine)
+ LPWSTR servernameTmp = nullptr;
+ NET_API_STATUS status = NetGetAnyDCName(nullptr, 0, (LPBYTE *)&servernameTmp);
+ if (status != NERR_Success) {
+ // this always fails on my desktop system, don't spam the output
+ // qDebug("NetGetAnyDCName failed with error %d", status);
+ }
+ ScopedNetApiBuffer<WCHAR> servername(servernameTmp);
+
+ QString fullName;
+ QString homeDir;
+ KGroupId group;
+ bool isAdmin = false;
+ // must NOT pass the qualified name ("domain\user") here or lookup fails -> just the name
+ // try USER_INFO_4 first, MSDN says it is valid only on servers (whatever that means), it works on my desktop system
+ // If it fails fall back to USER_INFO11, which has all the needed information except primary group
+ if (auto userInfo4 = getUserInfo<USER_INFO_4>(servername.get(), loginName, &status)) {
+ Q_ASSERT(KUserId(userInfo4->usri4_user_sid) == uid); // if this is not the same we have a logic error
+ fullName = QString::fromWCharArray(userInfo4->usri4_full_name);
+ homeDir = QString::fromWCharArray(userInfo4->usri4_home_dir);
+ isAdmin = userInfo4->usri4_priv == USER_PRIV_ADMIN;
+ // now determine the primary group:
+ const DWORD primaryGroup = userInfo4->usri4_primary_group_id;
+ // primary group is a relative identifier, i.e. in order to get the SID for that group
+ // we have to take the user SID and replace the last subauthority value with the relative identifier
+ group = KGroupId(uid.nativeId()); // constructor does not check whether the sid refers to a group
+ Q_ASSERT(group.isValid());
+ UCHAR numSubauthorities = *GetSidSubAuthorityCount(group.nativeId());
+ PDWORD lastSubAutority = GetSidSubAuthority(group.nativeId(), numSubauthorities - 1);
+ *lastSubAutority = primaryGroup;
+ } else if (auto userInfo11 = getUserInfo<USER_INFO_11>(servername.get(), loginName, &status)) {
+ fullName = QString::fromWCharArray(userInfo11->usri11_full_name);
+ homeDir = QString::fromWCharArray(userInfo11->usri11_home_dir);
+ isAdmin = userInfo11->usri11_priv == USER_PRIV_ADMIN;
+ } else {
+ qCWarning(KCOREADDONS_DEBUG).nospace() << "Could not get information for user " << domainName << "\\" << loginName
+ << ": error code = " << status;
+ return sharedNull;
+ }
+ if (homeDir.isEmpty()) {
+ homeDir = guessHomeDir(loginName, uid);
+ }
+ //if we couldn't find a primary group just take the first group found for this user
+ if (!group.isValid()) {
+ enumerateGroupsForUser<GROUP_USERS_INFO_0>(1, loginName, [&](const GROUP_USERS_INFO_0 &info) {
+ group = KGroupId::fromName(QString::fromWCharArray(info.grui0_name));
+ });
+ }
+ return Ptr(new Private(uid, group, loginName, fullName, domainName, homeDir, isAdmin));
+ }
+};
+
+KUser::Private::Ptr KUser::Private::sharedNull(new KUser::Private());
+
+KUser::KUser(UIDMode mode)
+{
+ if (mode == UseEffectiveUID) {
+ d = Private::create(KUserId::currentEffectiveUserId());
+ } else if (mode == UseRealUserID) {
+ d = Private::create(KUserId::currentUserId());
+ } else {
+ d = Private::sharedNull;
+ }
+}
+
+KUser::KUser(K_UID uid)
+ : d(Private::create(KUserId(uid)))
+{
+}
+
+KUser::KUser(KUserId uid)
+ : d(Private::create(uid))
+{
+}
+
+KUser::KUser(const QString &name)
+ : d(Private::create(KUserId::fromName(name)))
+{
+}
+
+KUser::KUser(const char *name)
+ : d(Private::create(KUserId::fromName(QString::fromLocal8Bit(name))))
+{
+}
+
+KUser::KUser(const KUser &user)
+ : d(user.d)
+{
+}
+
+KUser &KUser::operator=(const KUser &user)
+{
+ d = user.d;
+ return *this;
+}
+
+bool KUser::operator==(const KUser &user) const
+{
+ return isValid() && d->uid == user.d->uid;
+}
+
+bool KUser::isValid() const
+{
+ return d->uid.isValid();
+}
+
+bool KUser::isSuperUser() const
+{
+ return d->isAdmin;
+}
+
+QString KUser::loginName() const
+{
+ return d->loginName;
+}
+
+QString KUser::homeDir() const
+{
+ return d->homeDir;
+}
+
+// Some RAII objects to help uninitializing/destroying WinAPI stuff
+// used in faceIconPath.
+class COMInitializer
+{
+public:
+ COMInitializer() : result(CoInitialize(nullptr)) {}
+ ~COMInitializer()
+ {
+ if (SUCCEEDED(result)) {
+ CoUninitialize();
+ }
+ }
+ HRESULT result;
+};
+class W32Library
+{
+public:
+ W32Library(HMODULE h): h(h) {}
+ ~W32Library()
+ {
+ if (h) {
+ FreeLibrary(h);
+ }
+ }
+ operator HMODULE()
+ {
+ return h;
+ }
+ HMODULE h;
+};
+
+// faceIconPath uses undocumented Windows API known as SHGetUserPicturePath,
+// only accessible by ordinal, unofficially documented at
+// http://undoc.airesoft.co.uk/shell32.dll/SHGetUserPicturePath.php
+
+// The function has a different ordinal and parameters on Windows XP and Vista/7.
+// These structs encapsulate the differences.
+
+struct FaceIconPath_XP {
+ typedef HRESULT (WINAPI *funcptr_t)(LPCWSTR, DWORD, LPWSTR);
+ static const int ordinal = 233;
+ static HRESULT getPicturePath(funcptr_t SHGetUserPicturePathXP, LPCWSTR username, LPWSTR buf, UINT bufsize)
+ {
+ Q_UNUSED(bufsize);
+ // assumes the buffer is MAX_PATH in size
+ return SHGetUserPicturePathXP(username, 0, buf);
+ }
+};
+struct FaceIconPath_Vista {
+ typedef HRESULT (WINAPI *funcptr_t)(LPCWSTR, DWORD, LPWSTR, UINT);
+ static const int ordinal = 261;
+ static HRESULT getPicturePath(funcptr_t SHGetUserPicturePathV, LPCWSTR username, LPWSTR buf, UINT bufsize)
+ {
+ return SHGetUserPicturePathV(username, 0, buf, bufsize);
+ }
+};
+
+template <typename Platform>
+static QString faceIconPathImpl(LPCWSTR username)
+{
+ static COMInitializer COMinit;
+
+ static W32Library shellMod = LoadLibraryA("shell32.dll");
+ if (!shellMod) {
+ return QString();
+ }
+ static typename Platform::funcptr_t sgupp_ptr = reinterpret_cast<typename Platform::funcptr_t>(
+ GetProcAddress(shellMod, MAKEINTRESOURCEA(Platform::ordinal)));
+ if (!sgupp_ptr) {
+ return QString();
+ }
+
+ WCHAR pathBuf[MAX_PATH];
+
+ HRESULT res = Platform::getPicturePath(sgupp_ptr, username, pathBuf, MAX_PATH);
+ if (res != S_OK) {
+ return QString();
+ }
+ return QString::fromWCharArray(pathBuf);
+}
+
+QString KUser::faceIconPath() const
+{
+ if (!isValid()) {
+ return QString();
+ }
+
+ LPCWSTR username = reinterpret_cast<const WCHAR *>(d->loginName.utf16());
+
+ if (QSysInfo::windowsVersion() == QSysInfo::WV_XP ||
+ QSysInfo::windowsVersion() == QSysInfo::WV_2003)
+ {
+ return faceIconPathImpl<FaceIconPath_XP>(username);
+ } else if (QSysInfo::windowsVersion() >= QSysInfo::WV_VISTA) {
+ return faceIconPathImpl<FaceIconPath_Vista>(username);
+ }
+ return QString();
+}
+
+QString KUser::shell() const
+{
+ return isValid() ? QStringLiteral("cmd.exe") : QString();
+}
+
+KUserId KUser::userId() const
+{
+ return d->uid;
+}
+
+KGroupId KUser::groupId() const
+{
+ return d->gid;
+}
+
+QVariant KUser::property(UserProperty which) const
+{
+ if (which == FullName) {
+ return QVariant(d->fullName);
+ }
+
+ return QVariant();
+}
+
+KUser::~KUser()
+{
+}
+
+class Q_DECL_HIDDEN KUserGroup::Private : public QSharedData
+{
+public:
+ QString name;
+ KGroupId gid;
+ Private() {}
+ Private(const QString &name, KGroupId id)
+ : name(name), gid(id)
+ {
+ if (!name.isEmpty()) {
+ PBYTE groupInfoTmp = nullptr;
+ NET_API_STATUS status = NetGroupGetInfo(nullptr, (LPCWSTR)name.utf16(), 0, &groupInfoTmp);
+ // must always be freed, even on error
+ ScopedNetApiBuffer<GROUP_INFO_0> groupInfo((GROUP_INFO_0 *)groupInfoTmp);
+ if (status != NERR_Success) {
+ qCWarning(KCOREADDONS_DEBUG) << "Failed to find group with name" << name << "error =" << status;
+ groupInfo.reset();
+ }
+ if (!id.isValid()) {
+ gid = KGroupId::fromName(name);
+ }
+ }
+ }
+};
+
+KUserGroup::KUserGroup(const QString &_name)
+ : d(new Private(_name, KGroupId()))
+{
+}
+
+KUserGroup::KUserGroup(const char *_name)
+ : d(new Private(QLatin1String(_name), KGroupId()))
+{
+}
+
+static QString nameFromGroupId(KGroupId gid)
+{
+ if (!gid.isValid()) {
+ return QString();
+ }
+
+ DWORD bufferLen = UNLEN + 1;
+ WCHAR buffer[UNLEN + 1];
+ DWORD domainBufferLen = UNLEN + 1;
+ WCHAR domainBuffer[UNLEN + 1];
+ SID_NAME_USE eUse;
+ QString name;
+ if (LookupAccountSidW(NULL, gid.nativeId(), buffer, &bufferLen, domainBuffer, &domainBufferLen, &eUse)) {
+ if (eUse == SidTypeGroup || eUse == SidTypeWellKnownGroup) {
+ name = QString::fromWCharArray(buffer);
+ } else {
+ qCWarning(KCOREADDONS_DEBUG) << QString::fromWCharArray(buffer) << "is not a group, SID type is" << eUse;
+ }
+ }
+ return name;
+}
+
+KUserGroup::KUserGroup(KGroupId gid)
+ : d(new Private(nameFromGroupId(gid), gid))
+{
+}
+
+KUserGroup::KUserGroup(K_GID gid)
+{
+ KGroupId groupId(gid);
+ d = new Private(nameFromGroupId(groupId), groupId);
+}
+
+KUserGroup::KUserGroup(KUser::UIDMode mode)
+{
+ KGroupId gid;
+ if (mode == KUser::UseEffectiveUID) {
+ gid = KGroupId::currentGroupId();
+ } else if (mode == KUser::UseRealUserID) {
+ gid = KGroupId::currentEffectiveGroupId();
+ }
+ d = new Private(nameFromGroupId(gid), gid);
+}
+
+KUserGroup::KUserGroup(const KUserGroup &group)
+ : d(group.d)
+{
+}
+
+KUserGroup &KUserGroup::operator =(const KUserGroup &group)
+{
+ d = group.d;
+ return *this;
+}
+
+bool KUserGroup::operator==(const KUserGroup &group) const
+{
+ return isValid() && d->gid == group.d->gid && d->name == group.d->name;
+}
+
+bool KUserGroup::isValid() const
+{
+ return d->gid.isValid() && !d->name.isEmpty();
+}
+
+QString KUserGroup::name() const
+{
+ return d->name;
+}
+
+KGroupId KUserGroup::groupId() const
+{
+ return d->gid;
+}
+
+KUserGroup::~KUserGroup()
+{
+}
+
+QList<KUser> KUser::allUsers(uint maxCount)
+{
+ QList<KUser> result;
+ // No advantage if we take a USER_INFO_11, since there is no way of copying it
+ // and it is not owned by this function!
+ // -> get a USER_INFO_0 instead and then use KUser(QString)
+ // USER_INFO_23 or USER_INFO_23 would be ideal here since they contains a SID,
+ // but that fails with error code 0x7c (bad level)
+ enumerateAllUsers<USER_INFO_0>(maxCount, [&result](const USER_INFO_0 &info) {
+ result.append(KUser(QString::fromWCharArray(info.usri0_name)));
+ });
+ return result;
+}
+
+QStringList KUser::allUserNames(uint maxCount)
+{
+ QStringList result;
+ enumerateAllUsers<USER_INFO_0>(maxCount, [&result](const USER_INFO_0 &info) {
+ result.append(QString::fromWCharArray(info.usri0_name));
+ });
+ return result;
+}
+
+QList<KUserGroup> KUserGroup::allGroups(uint maxCount)
+{
+ QList<KUserGroup> result;
+ // MSDN documentation say 3 is a valid level, however the function fails with invalid level!!!
+ // User GROUP_INFO_0 instead...
+ enumerateAllGroups<GROUP_INFO_0>(maxCount, [&result](const GROUP_INFO_0 &groupInfo) {
+ result.append(KUserGroup(QString::fromWCharArray(groupInfo.grpi0_name)));
+ });
+ return result;
+}
+
+QStringList KUserGroup::allGroupNames(uint maxCount)
+{
+ QStringList result;
+ enumerateAllGroups<GROUP_INFO_0>(maxCount, [&result](const GROUP_INFO_0 &groupInfo) {
+ result.append(QString::fromWCharArray(groupInfo.grpi0_name));
+ });
+ return result;
+}
+
+QList<KUserGroup> KUser::groups(uint maxCount) const
+{
+ QList<KUserGroup> result;
+ if (!isValid()) {
+ return result;
+ }
+ enumerateGroupsForUser<GROUP_USERS_INFO_0>(maxCount, d->loginName, [&result](const GROUP_USERS_INFO_0 &info) {
+ result.append(KUserGroup(QString::fromWCharArray(info.grui0_name)));
+ });
+ return result;
+}
+
+QStringList KUser::groupNames(uint maxCount) const
+{
+ QStringList result;
+ if (!isValid()) {
+ return result;
+ }
+ enumerateGroupsForUser<GROUP_USERS_INFO_0>(maxCount, d->loginName, [&result](const GROUP_USERS_INFO_0 &info) {
+ result.append(QString::fromWCharArray(info.grui0_name));
+ });
+ return result;
+}
+
+QList<KUser> KUserGroup::users(uint maxCount) const
+{
+ QList<KUser> result;
+ if (!isValid()) {
+ return result;
+ }
+ enumerateGroupsForUser<GROUP_USERS_INFO_0>(maxCount, d->name, [&result](const GROUP_USERS_INFO_0 &info) {
+ result.append(KUser(QString::fromWCharArray(info.grui0_name)));
+ });
+ return result;
+}
+
+QStringList KUserGroup::userNames(uint maxCount) const
+{
+ QStringList result;
+ if (!isValid()) {
+ return result;
+ }
+ enumerateGroupsForUser<GROUP_USERS_INFO_0>(maxCount, d->name, [&result](const GROUP_USERS_INFO_0 &info) {
+ result.append(QString::fromWCharArray(info.grui0_name));
+ });
+ return result;
+}
+
+static const auto invalidSidString = QStringLiteral("<invalid SID>");
+
+static QString sidToString(void *sid)
+{
+ if (!sid || !IsValidSid(sid)) {
+ return invalidSidString;
+ }
+ WCHAR *sidStr; // allocated by ConvertStringSidToSidW, must be freed using LocalFree()
+ if (!ConvertSidToStringSidW(sid, &sidStr)) {
+ return invalidSidString;
+ }
+ QString ret = QString::fromWCharArray(sidStr);
+ LocalFree(sidStr);
+ return ret;
+}
+
+struct WindowsSIDWrapper : public QSharedData {
+ char sidBuffer[SECURITY_MAX_SID_SIZE];
+ /** @return a copy of @p sid or null if sid is not valid or an error occurs */
+ static WindowsSIDWrapper *copySid(PSID sid)
+ {
+ if (!sid || !IsValidSid(sid)) {
+ return nullptr;
+ }
+ //create a copy of sid
+ WindowsSIDWrapper *copy = new WindowsSIDWrapper();
+ bool success = CopySid(SECURITY_MAX_SID_SIZE, copy->sidBuffer, sid);
+ if (!success) {
+ QString sidString = sidToString(sid);
+ qWarning("Failed to copy SID %s, error = %d", qPrintable(sidString), (int)GetLastError());
+ delete copy;
+ return nullptr;
+ }
+ return copy;
+ }
+};
+
+template<>
+KUserOrGroupId<void *>::KUserOrGroupId()
+{
+}
+
+template<>
+KUserOrGroupId<void *>::~KUserOrGroupId()
+{
+}
+
+template<>
+KUserOrGroupId<void *>::KUserOrGroupId(const KUserOrGroupId<void *> &other)
+ : data(other.data)
+{
+}
+
+template<>
+inline KUserOrGroupId<void *> &KUserOrGroupId<void *>::operator=(const KUserOrGroupId<void *> &other)
+{
+ data = other.data;
+ return *this;
+}
+
+template<>
+KUserOrGroupId<void *>::KUserOrGroupId(void *nativeId)
+ : data(WindowsSIDWrapper::copySid(nativeId))
+{
+}
+
+template<>
+bool KUserOrGroupId<void *>::isValid() const
+{
+ return data;
+}
+
+template<>
+void *KUserOrGroupId<void *>::nativeId() const
+{
+ if (!data) {
+ return nullptr;
+ }
+ return data->sidBuffer;
+}
+
+template<>
+bool KUserOrGroupId<void *>::operator==(const KUserOrGroupId<void *> &other) const
+{
+ if (data) {
+ if (!other.data) {
+ return false;
+ }
+ return EqualSid(data->sidBuffer, other.data->sidBuffer);
+ }
+ return !other.data; //only equal if other data is also invalid
+}
+
+template<>
+bool KUserOrGroupId<void *>::operator!=(const KUserOrGroupId<void *> &other) const
+{
+ return !(*this == other);
+}
+
+template<>
+QString KUserOrGroupId<void *>::toString() const
+{
+ return sidToString(data ? data->sidBuffer : nullptr);
+}
+
+/** T must be either KUserId or KGroupId, Callback has signature T(PSID, SID_NAME_USE) */
+template<class T, class Callback>
+static T sidFromName(const QString &name, Callback callback)
+{
+ if (name.isEmpty()) {
+ // for some reason empty string will always return S-1-5-32 which is of type domain
+ // we only want users or groups -> return invalid
+ return T();
+ }
+ char buffer[SECURITY_MAX_SID_SIZE];
+ DWORD sidLength = SECURITY_MAX_SID_SIZE;
+ // ReferencedDomainName must be passed or LookupAccountNameW fails
+ // Documentation says it is optional, however if not passed the function fails and returns the required size
+ WCHAR domainBuffer[1024];
+ DWORD domainBufferSize = 1024;
+ SID_NAME_USE sidType;
+ bool ok = LookupAccountNameW(nullptr, (LPCWSTR)name.utf16(), buffer, &sidLength, domainBuffer, &domainBufferSize, &sidType);
+ if (!ok) {
+ qCWarning(KCOREADDONS_DEBUG) << "Failed to lookup account" << name << "error code =" << GetLastError();
+ return T();
+ }
+ return callback(buffer, sidType);
+}
+
+KUserId KUserId::fromName(const QString &name)
+{
+ return sidFromName<KUserId>(name, [&](PSID sid, SID_NAME_USE sidType) -> KUserId {
+ if (sidType != SidTypeUser && sidType != SidTypeDeletedAccount)
+ {
+ qCWarning(KCOREADDONS_DEBUG).nospace() << "Failed to lookup user name " << name
+ << ": resulting SID " << sidToString(sid) << " is not a user."
+ " Got SID type " << sidType << " instead.";
+ return KUserId();
+ }
+ return KUserId(sid);
+ });
+}
+
+KGroupId KGroupId::fromName(const QString &name)
+{
+ return sidFromName<KGroupId>(name, [&](PSID sid, SID_NAME_USE sidType) -> KGroupId {
+ if (sidType != SidTypeGroup && sidType != SidTypeWellKnownGroup)
+ {
+ qCWarning(KCOREADDONS_DEBUG).nospace() << "Failed to lookup user name " << name
+ << ": resulting SID " << sidToString(sid) << " is not a group."
+ " Got SID type " << sidType << " instead.";
+ return KGroupId();
+ }
+ return KGroupId(sid);
+ });
+}
+
+static std::unique_ptr<char[]> queryProcessInformation(TOKEN_INFORMATION_CLASS type)
+{
+ HANDLE _token;
+ if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &_token)) {
+ qWarning("Failed to get the token for the current process: %d", (int)GetLastError());
+ return nullptr;
+ }
+ ScopedHANDLE token(_token, handleCloser);
+ // query required size
+ DWORD requiredSize;
+ if (!GetTokenInformation(token.get(), type, nullptr, 0, &requiredSize)) {
+ if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) {
+ qWarning("Failed to get the required size for the token information %d: %d",
+ type, (int)GetLastError());
+ return nullptr;
+ }
+ }
+ std::unique_ptr<char[]> buffer(new char[requiredSize]);
+ if (!GetTokenInformation(token.get(), type, buffer.get(), requiredSize, &requiredSize)) {
+ qWarning("Failed to get token information %d from current process: %d",
+ type, (int)GetLastError());
+ return nullptr;
+ }
+ return buffer;
+}
+
+KUserId KUserId::currentUserId()
+{
+ std::unique_ptr<char[]> userTokenBuffer = queryProcessInformation(TokenUser);
+ TOKEN_USER *userToken = (TOKEN_USER *)userTokenBuffer.get();
+ return KUserId(userToken->User.Sid);
+}
+
+KGroupId KGroupId::currentGroupId()
+{
+ std::unique_ptr<char[]> primaryGroupBuffer = queryProcessInformation(TokenPrimaryGroup);
+ TOKEN_PRIMARY_GROUP *primaryGroup = (TOKEN_PRIMARY_GROUP *)primaryGroupBuffer.get();
+ return KGroupId(primaryGroup->PrimaryGroup);
+}
+
+KUserId KUserId::currentEffectiveUserId()
+{
+ return currentUserId();
+}
+
+KGroupId KGroupId::currentEffectiveGroupId()
+{
+ return currentGroupId();
+}
+
+KCOREADDONS_EXPORT uint qHash(const KUserId &id, uint seed)
+{
+ if (!id.isValid()) {
+ return seed;
+ }
+ // we can't just hash the pointer since equal object must have the same hash -> hash contents
+ char *sid = (char *)id.nativeId();
+ return qHash(QByteArray::fromRawData(sid, GetLengthSid(sid)), seed);
+}
+
+KCOREADDONS_EXPORT uint qHash(const KGroupId &id, uint seed)
+{
+ if (!id.isValid()) {
+ return seed;
+ }
+ // we can't just hash the pointer since equal object must have the same hash -> hash contents
+ char *sid = (char *)id.nativeId();
+ return qHash(QByteArray::fromRawData(sid, GetLengthSid(sid)), seed);
+}
--- /dev/null
+# always install the mime-types
+install(FILES kde5.xml DESTINATION ${KDE_INSTALL_MIMEDIR})
+
+# for KDE frameworks 5 we require at least version 1.3
+find_package(SharedMimeInfo 1.3)
+set_package_properties(SharedMimeInfo PROPERTIES
+ TYPE OPTIONAL
+ PURPOSE "Allows KDE applications to determine file types"
+ )
+
+# update XDG mime-types if shared mime info is around
+if(SharedMimeInfo_FOUND)
+ update_xdg_mimetypes(${KDE_INSTALL_MIMEDIR})
+endif()
--- /dev/null
+function get_files
+{
+ echo kde5.xml
+}
+
+function po_for_file
+{
+ case "$1" in
+ kde5.xml)
+ echo xml_mimetypes5.po
+ ;;
+ esac
+}
+
+function tags_for_file
+{
+ case "$1" in
+ kde5.xml)
+ echo comment
+ ;;
+ esac
+}
+
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+It comes with ABSOLUTELY NO WARRANTY, to the extent permitted by law. You may
+redistribute copies of update-mime-database under the terms of the GNU General
+Public License. For more information about these matters, see the file named
+COPYING.
+-->
+<!--
+Notes:
+- the mime types in this file are valid with the version 0.30 of the
+ shared-mime-info package.
+- the "fdo #xxxxx" are the wish in the freedesktop.org bug database to include
+ the mime type there.
+-->
+
+<!-- IMPORTANT: before you add anything here, please consider submitting
+ it upstream to shared-mime-info instead.
+ This file is only for things that are either urgently needed, or
+ which have been refused upstream.
+ It also has KDE-specific mimetypes, but remember that having such things
+ in s-m-i means that someone receiving such a file by email or from a website
+ will at least get a description of what it is, even without kcoreaddons installed.-->
+<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
+ <mime-type type="application/relaxng">
+ <sub-class-of type="application/xml"/>
+ <comment>RELAX NG</comment>
+ <comment xml:lang="ar">RELAX NG</comment>
+ <comment xml:lang="bs">Relax NG</comment>
+ <comment xml:lang="ca">RELAX NG</comment>
+ <comment xml:lang="ca@valencia">RELAX NG</comment>
+ <comment xml:lang="cs">RELAX NG</comment>
+ <comment xml:lang="da">RELAX NG</comment>
+ <comment xml:lang="de">RELAX NG</comment>
+ <comment xml:lang="el">RELAX NG</comment>
+ <comment xml:lang="en_GB">RELAX NG</comment>
+ <comment xml:lang="eo">RELAX NG</comment>
+ <comment xml:lang="es">RELAX NG</comment>
+ <comment xml:lang="et">RELAX NG</comment>
+ <comment xml:lang="eu">RELAX NG</comment>
+ <comment xml:lang="fi">RELAX NG</comment>
+ <comment xml:lang="fr">RELAX NG</comment>
+ <comment xml:lang="ga">RELAX NG</comment>
+ <comment xml:lang="gd">RELAX NG</comment>
+ <comment xml:lang="gl">RELAX NG</comment>
+ <comment xml:lang="hr">RELAX NG</comment>
+ <comment xml:lang="hu">RELAX NG</comment>
+ <comment xml:lang="ia">RELAX NG</comment>
+ <comment xml:lang="id">RELAX NG</comment>
+ <comment xml:lang="is">RELAX NG</comment>
+ <comment xml:lang="it">RELAX NG</comment>
+ <comment xml:lang="ja">RELAX NG</comment>
+ <comment xml:lang="kk">RELAX NG</comment>
+ <comment xml:lang="km">RELAX NG</comment>
+ <comment xml:lang="ko">RELAX NG</comment>
+ <comment xml:lang="lt">RELAX NG</comment>
+ <comment xml:lang="lv">RELAX NG</comment>
+ <comment xml:lang="ml">റിലാക്സ് എന് ജി</comment>
+ <comment xml:lang="mr">RELAX NG</comment>
+ <comment xml:lang="nb">RELAX NG</comment>
+ <comment xml:lang="nds">RELAX NG</comment>
+ <comment xml:lang="nl">RELAX NG</comment>
+ <comment xml:lang="nn">RELAX NG</comment>
+ <comment xml:lang="pa">RELAX NG</comment>
+ <comment xml:lang="pl">RELAX NG</comment>
+ <comment xml:lang="pt">RELAX NG</comment>
+ <comment xml:lang="pt_BR">RELAX NG</comment>
+ <comment xml:lang="ro">RELAX NG</comment>
+ <comment xml:lang="ru">документ RELAX NG</comment>
+ <comment xml:lang="se">RELAX NG</comment>
+ <comment xml:lang="sk">RELAX NG</comment>
+ <comment xml:lang="sl">RELAX NG</comment>
+ <comment xml:lang="sq">RELAX NG</comment>
+ <comment xml:lang="sr">релакс НГ</comment>
+ <comment xml:lang="sr@ijekavian">релакс НГ</comment>
+ <comment xml:lang="sr@ijekavianlatin">Relax NG</comment>
+ <comment xml:lang="sr@latin">Relax NG</comment>
+ <comment xml:lang="sv">RELAX NG</comment>
+ <comment xml:lang="tr">RELAX NG</comment>
+ <comment xml:lang="ug">RELAX NG</comment>
+ <comment xml:lang="uk">RELAX NG</comment>
+ <comment xml:lang="zh_CN">RELAX NG</comment>
+ <comment xml:lang="zh_TW">RELAX NG</comment>
+ <glob pattern="*.rng"/>
+ </mime-type>
+ <mime-type type="application/x-cda">
+ <comment>CD audio</comment>
+ <comment xml:lang="ar">صوت CD</comment>
+ <comment xml:lang="bs">CD audio</comment>
+ <comment xml:lang="ca">CD àudio</comment>
+ <comment xml:lang="ca@valencia">CD àudio</comment>
+ <comment xml:lang="cs">Audio CD</comment>
+ <comment xml:lang="da">Cd-lyd</comment>
+ <comment xml:lang="de">CD-Audio</comment>
+ <comment xml:lang="el">Ήχος CD</comment>
+ <comment xml:lang="en_GB">CD audio</comment>
+ <comment xml:lang="es">Audio CD</comment>
+ <comment xml:lang="et">CD audio</comment>
+ <comment xml:lang="eu">Audio CDa</comment>
+ <comment xml:lang="fi">CD-ääni</comment>
+ <comment xml:lang="fr">CD audio</comment>
+ <comment xml:lang="ga">Fuaim dhlúthdhiosca</comment>
+ <comment xml:lang="gd">CD fuaime</comment>
+ <comment xml:lang="gl">CD de son</comment>
+ <comment xml:lang="hr">CD audio</comment>
+ <comment xml:lang="hu">CD-hang</comment>
+ <comment xml:lang="ia">Audio CD</comment>
+ <comment xml:lang="id">Audio CD</comment>
+ <comment xml:lang="is">CD hljóð</comment>
+ <comment xml:lang="it">audio CD</comment>
+ <comment xml:lang="ja">CD オーディオ</comment>
+ <comment xml:lang="kk">аудио CD</comment>
+ <comment xml:lang="km">ស៊ីឌីអូឌីយ៉ូ</comment>
+ <comment xml:lang="ko">CD 오디오</comment>
+ <comment xml:lang="lt">CD audio</comment>
+ <comment xml:lang="lv">CD audio</comment>
+ <comment xml:lang="ml">സിഡി ശബ്ദം</comment>
+ <comment xml:lang="mr">CD ऑडिओ</comment>
+ <comment xml:lang="ms">Audio CD</comment>
+ <comment xml:lang="nb">CD-lyd</comment>
+ <comment xml:lang="nds">Klang-CD</comment>
+ <comment xml:lang="nl">CD-audio</comment>
+ <comment xml:lang="nn">CD-lyd</comment>
+ <comment xml:lang="pa">CD ਆਡੀਓ</comment>
+ <comment xml:lang="pl">Audio CD</comment>
+ <comment xml:lang="pt">Áudio de CD</comment>
+ <comment xml:lang="pt_BR">Áudio de CD</comment>
+ <comment xml:lang="ro">CD audio</comment>
+ <comment xml:lang="ru">дорожка на Audio CD</comment>
+ <comment xml:lang="se">CD-jietna</comment>
+ <comment xml:lang="sk">Audio CD</comment>
+ <comment xml:lang="sl">Zvočni CD</comment>
+ <comment xml:lang="sq">CD audio</comment>
+ <comment xml:lang="sr">ЦД аудио</comment>
+ <comment xml:lang="sr@ijekavian">ЦД аудио</comment>
+ <comment xml:lang="sr@ijekavianlatin">CD audio</comment>
+ <comment xml:lang="sr@latin">CD audio</comment>
+ <comment xml:lang="sv">Cd-ljud</comment>
+ <comment xml:lang="th">แผ่นซีดีเสียง</comment>
+ <comment xml:lang="tr">CD sesi</comment>
+ <comment xml:lang="ug">ئۈن CD</comment>
+ <comment xml:lang="uk">звуковий КД</comment>
+ <comment xml:lang="zh_CN">CD 音频</comment>
+ <comment xml:lang="zh_TW">CD 音效</comment>
+ <glob pattern="*.cda"/>
+ </mime-type>
+ <mime-type type="application/x-font-snf">
+ <comment>SNF bitmap font</comment>
+ <comment xml:lang="ar">خط SNF bitmap</comment>
+ <comment xml:lang="bs">SNF bitmapski font</comment>
+ <comment xml:lang="ca">Tipus de lletra de mapa de bits SNF</comment>
+ <comment xml:lang="ca@valencia">Tipus de lletra de mapa de bits SNF</comment>
+ <comment xml:lang="cs">Bitmapový font SNF</comment>
+ <comment xml:lang="da">SNF bitmap-skrifttype</comment>
+ <comment xml:lang="de">SNF-Bitmap-Schriftart</comment>
+ <comment xml:lang="el">Γραμματοσειρά bitmap SNF</comment>
+ <comment xml:lang="en_GB">SNF bitmap font</comment>
+ <comment xml:lang="es">Tipo de letra de mapa de bits SNF</comment>
+ <comment xml:lang="et">SNF bittrasterfont</comment>
+ <comment xml:lang="eu">SNF bitmap letra tipoa</comment>
+ <comment xml:lang="fi">SNF-bittikarttafontti</comment>
+ <comment xml:lang="fr">Police bitmap SNF</comment>
+ <comment xml:lang="ga">Cló Giotánmhapach SNF</comment>
+ <comment xml:lang="gd">cruth-clò bitmap SNF</comment>
+ <comment xml:lang="gl">Tipo de letra SNF bitmap</comment>
+ <comment xml:lang="hr">SNF bitmap pismo</comment>
+ <comment xml:lang="hu">SNF-betűtípus</comment>
+ <comment xml:lang="ia">font de bitmap SNF</comment>
+ <comment xml:lang="id">Fon bitmap SNF</comment>
+ <comment xml:lang="is">SNF bitamyndaletur</comment>
+ <comment xml:lang="it">carattere bitmap SNF</comment>
+ <comment xml:lang="ja">SNF ビットマップフォント</comment>
+ <comment xml:lang="kk">SNF нүктелік қаріпі</comment>
+ <comment xml:lang="km">ពុម្ពអក្សរផែនទីរូបភាពរបស់ SNF</comment>
+ <comment xml:lang="ko">SNF 비트맵 글꼴</comment>
+ <comment xml:lang="lt">SNF rastrinis šriftas</comment>
+ <comment xml:lang="lv">SNF bitkartes fonts</comment>
+ <comment xml:lang="ml">എസ് എന് എഫ് ബിറ്റ്മാപ്പ് അക്ഷരസഞ്ചയം</comment>
+ <comment xml:lang="mr">SNF बिटमॅप फॉन्ट</comment>
+ <comment xml:lang="nb">SNF bitmapskrift</comment>
+ <comment xml:lang="nds">SNF-Pixelbild-Schriftoort</comment>
+ <comment xml:lang="nl">SNF-bitmap-lettertype</comment>
+ <comment xml:lang="nn">SNF-punktskrift</comment>
+ <comment xml:lang="pa">SNF ਬਿੱਟਮੈਪ ਫੋਂਟ</comment>
+ <comment xml:lang="pl">Czcionka bitmapowa SNF</comment>
+ <comment xml:lang="pt">Tipo de letra por imagens SNF</comment>
+ <comment xml:lang="pt_BR">Fonte bitmap SNF</comment>
+ <comment xml:lang="ro">Font SNF hartă de biți</comment>
+ <comment xml:lang="ru">растровый шрифт SNF</comment>
+ <comment xml:lang="se">SNF-fonta</comment>
+ <comment xml:lang="sk">Bitmapové písmo SNF</comment>
+ <comment xml:lang="sl">Bitna pisava SNF</comment>
+ <comment xml:lang="sr">СНФ битмапски фонт</comment>
+ <comment xml:lang="sr@ijekavian">СНФ битмапски фонт</comment>
+ <comment xml:lang="sr@ijekavianlatin">SNF bitmapski font</comment>
+ <comment xml:lang="sr@latin">SNF bitmapski font</comment>
+ <comment xml:lang="sv">SNF punktavbildat teckensnitt</comment>
+ <comment xml:lang="th">แบบอักษรบิตแมปรูปแบบ SNF</comment>
+ <comment xml:lang="tr">SNF bitmap yazı tipi</comment>
+ <comment xml:lang="ug">SNF بىت سۈرەت خەت نۇسخىسى</comment>
+ <comment xml:lang="uk">растровий файл SNF</comment>
+ <comment xml:lang="zh_CN">SNF 点阵字体</comment>
+ <comment xml:lang="zh_TW">SNF Bitmap 字型</comment>
+ <glob pattern="*.snf"/>
+ <glob pattern="*.snf.Z"/>
+ <glob pattern="*.snf.gz"/>
+ </mime-type>
+ <mime-type type="application/x-java-applet">
+ <comment>Java applet</comment>
+ <comment xml:lang="ar">بريمج جافا</comment>
+ <comment xml:lang="bg">Аплет на Java</comment>
+ <comment xml:lang="bs">JAVA aplet</comment>
+ <comment xml:lang="ca">Miniaplicació Java</comment>
+ <comment xml:lang="ca@valencia">Miniaplicació Java</comment>
+ <comment xml:lang="cs">Java applet</comment>
+ <comment xml:lang="da">Java applet</comment>
+ <comment xml:lang="de">Java-Miniprogramm</comment>
+ <comment xml:lang="el">Μικροεφαρμογή Java</comment>
+ <comment xml:lang="en_GB">Java applet</comment>
+ <comment xml:lang="es">Miniaplicación Java</comment>
+ <comment xml:lang="et">Java aplett</comment>
+ <comment xml:lang="eu">Java appleta</comment>
+ <comment xml:lang="fi">Java-sovelma</comment>
+ <comment xml:lang="fr">Applet Java</comment>
+ <comment xml:lang="ga">Feidhmchláirín Java</comment>
+ <comment xml:lang="gd">aplaid Java</comment>
+ <comment xml:lang="gl">Miniaplicativo de Java</comment>
+ <comment xml:lang="hr">Java applet</comment>
+ <comment xml:lang="hu">Java-kisalkalmazás</comment>
+ <comment xml:lang="ia">Applet Java</comment>
+ <comment xml:lang="id">Applet Java</comment>
+ <comment xml:lang="is">Java forritlingur</comment>
+ <comment xml:lang="it">applet Java</comment>
+ <comment xml:lang="ja">Java アプレット</comment>
+ <comment xml:lang="kk">Java апплеті</comment>
+ <comment xml:lang="km">អាប់ភ្លេត Java</comment>
+ <comment xml:lang="ko">자바 애플릿</comment>
+ <comment xml:lang="lt">Java papildinys</comment>
+ <comment xml:lang="lv">Java sīklietotne</comment>
+ <comment xml:lang="ml">ജാവ ആപ്പ്ലെറ്റ്</comment>
+ <comment xml:lang="mr">जावा एप्लेट</comment>
+ <comment xml:lang="nb">Java applet</comment>
+ <comment xml:lang="nds">Java-Lüttprogramm</comment>
+ <comment xml:lang="nl">Java-applet</comment>
+ <comment xml:lang="nn">Java-applett</comment>
+ <comment xml:lang="pa">ਜਾਵਾ ਐਪਲਿਟ</comment>
+ <comment xml:lang="pl">Aplet Javy</comment>
+ <comment xml:lang="pt">'Applet' de Java</comment>
+ <comment xml:lang="pt_BR">Miniaplicativo Java</comment>
+ <comment xml:lang="ro">Miniaplicație Java</comment>
+ <comment xml:lang="ru">Java-апплет</comment>
+ <comment xml:lang="se">Javaprográmmaš</comment>
+ <comment xml:lang="sk">Java applet</comment>
+ <comment xml:lang="sl">Aplet Java</comment>
+ <comment xml:lang="sq">Miniapliaktiv Java</comment>
+ <comment xml:lang="sr">јавански аплет</comment>
+ <comment xml:lang="sr@ijekavian">јавански аплет</comment>
+ <comment xml:lang="sr@ijekavianlatin">javanski aplet</comment>
+ <comment xml:lang="sr@latin">javanski aplet</comment>
+ <comment xml:lang="sv">Java-miniprogram</comment>
+ <comment xml:lang="th">จาวาแอพเพล็ต</comment>
+ <comment xml:lang="tr">Java programcığı</comment>
+ <comment xml:lang="ug">Java قوللانچاق</comment>
+ <comment xml:lang="uk">аплет Java</comment>
+ <comment xml:lang="zh_CN">Java 小程序</comment>
+ <comment xml:lang="zh_TW">Java applet</comment>
+ </mime-type>
+ <mime-type type="application/x-khtml-adaptor">
+ <comment>KHTML Extension Adaptor</comment>
+ <comment xml:lang="ar">مكيف الامتدادات KHTML</comment>
+ <comment xml:lang="bs">KHTML‑ov adapter proširenja</comment>
+ <comment xml:lang="ca">Adaptador de l'extensió KHTML</comment>
+ <comment xml:lang="ca@valencia">Adaptador de l'extensió KHTML</comment>
+ <comment xml:lang="cs">Adaptér pro KHTML rozšíření</comment>
+ <comment xml:lang="da">KHTML udvidelsesadapter</comment>
+ <comment xml:lang="de">Adapter für KHTML-Erweiterungen</comment>
+ <comment xml:lang="el">Προσαρμογέας επέκτασης KHTML</comment>
+ <comment xml:lang="en_GB">KHTML Extension Adaptor</comment>
+ <comment xml:lang="es">Adaptador de extensión de KHTML</comment>
+ <comment xml:lang="et">KHTML-i laiendi adapter</comment>
+ <comment xml:lang="eu">KHTML hedapen adaptadorea</comment>
+ <comment xml:lang="fi">KHTML-laajennussovitin</comment>
+ <comment xml:lang="fr">Adaptateur d'extension KHTML</comment>
+ <comment xml:lang="ga">Cuibheoir Eisínteacht KHTML</comment>
+ <comment xml:lang="gd">adaptar leudachain KHTML</comment>
+ <comment xml:lang="gl">Adaptador de extensión de KHTML</comment>
+ <comment xml:lang="hr">KHTML adapter proširenja</comment>
+ <comment xml:lang="hu">KHTML-es kiterjesztéskezelő</comment>
+ <comment xml:lang="ia">Adaptator pro KHTML Extension</comment>
+ <comment xml:lang="id">Adaptor Ekstensi KHTML</comment>
+ <comment xml:lang="is">Aðlögun KHTML-endinga</comment>
+ <comment xml:lang="it">adattatore di estensioni di KHTML</comment>
+ <comment xml:lang="ja">KHTML エクステンションアダプタ</comment>
+ <comment xml:lang="kk">KHTML кеңейтулер адаптері</comment>
+ <comment xml:lang="km">អាដាប់ទ័រផ្នែកបន្ថែមរបស់ KHTML</comment>
+ <comment xml:lang="ko">KHTML 확장 기능 어댑터</comment>
+ <comment xml:lang="lt">KHTML praplėtimų adapteris</comment>
+ <comment xml:lang="lv">KHTML paplašinājumu adapteris</comment>
+ <comment xml:lang="ml">കെഎച്ച്ടിഎംഎല് എക്സ്റ്റന്ഷന് അഡാപ്റ്റര്</comment>
+ <comment xml:lang="mr">KHTML एक्सटेंशन एडॅप्टर</comment>
+ <comment xml:lang="nb">KHTML-filutvidelsesadapter</comment>
+ <comment xml:lang="nds">Koppelsteed för KHTML-Verwiedern</comment>
+ <comment xml:lang="nl">KHTML-extensie aanpassen</comment>
+ <comment xml:lang="nn">KHTML-utvidingstilpassar</comment>
+ <comment xml:lang="pa">KHTML ਇਕਸਟੈਨਸ਼ਨ ਅਡੋਪਟਰ</comment>
+ <comment xml:lang="pl">Adapter rozszerzeń KHTML</comment>
+ <comment xml:lang="pt">Adaptador de Extensões do KHTML</comment>
+ <comment xml:lang="pt_BR">Adaptador de extensões do KHTML</comment>
+ <comment xml:lang="ro">Adaptor de extensii KHTML</comment>
+ <comment xml:lang="ru">адаптер расширений KHTML</comment>
+ <comment xml:lang="se">KHTML-viiddádusheiveheaddji</comment>
+ <comment xml:lang="sk">Adaptér pre KHTML rozšírenia</comment>
+ <comment xml:lang="sl">Prilagodilnik razširitve KHTML</comment>
+ <comment xml:lang="sr">КХТМЛ‑ов адаптер проширења</comment>
+ <comment xml:lang="sr@ijekavian">КХТМЛ‑ов адаптер проширења</comment>
+ <comment xml:lang="sr@ijekavianlatin">KHTML‑ov adapter proširenja</comment>
+ <comment xml:lang="sr@latin">KHTML‑ov adapter proširenja</comment>
+ <comment xml:lang="sv">KHTML-utökningsanpassning</comment>
+ <comment xml:lang="tr">KHTML Eklenti Bağdaştırıcısı</comment>
+ <comment xml:lang="ug">KHTML كېڭەيتىلمە ماسلاشتۇرغۇچ</comment>
+ <comment xml:lang="uk">адаптер розширень KHTML</comment>
+ <comment xml:lang="zh_CN">KHTML 扩展适配器</comment>
+ <comment xml:lang="zh_TW">KHTML 延伸裝置</comment>
+ </mime-type>
+ <mime-type type="application/x-kcsrc">
+ <comment>KDE color scheme</comment>
+ <comment xml:lang="ar">مخطط ألوان كدي</comment>
+ <comment xml:lang="bg">Цветова схема за KDE</comment>
+ <comment xml:lang="bs">KDE šema boja</comment>
+ <comment xml:lang="ca">Esquema de color del KDE</comment>
+ <comment xml:lang="ca@valencia">Esquema de color del KDE</comment>
+ <comment xml:lang="cs">Barevné schéma KDE</comment>
+ <comment xml:lang="da">KDE farvetema</comment>
+ <comment xml:lang="de">KDE-Farbschema</comment>
+ <comment xml:lang="el">Θέμα χρωμάτων KDE</comment>
+ <comment xml:lang="en_GB">KDE colour scheme</comment>
+ <comment xml:lang="es">Esquema de color de KDE</comment>
+ <comment xml:lang="et">KDE värviskeem</comment>
+ <comment xml:lang="eu">KDE kolore eskema</comment>
+ <comment xml:lang="fi">KDE-värimalli</comment>
+ <comment xml:lang="fr">Schéma de couleurs KDE</comment>
+ <comment xml:lang="ga">Téama dathanna de chuid KDE</comment>
+ <comment xml:lang="gd">sgeama dathan KDE</comment>
+ <comment xml:lang="gl">Esquema de cores de KDE</comment>
+ <comment xml:lang="hr">KDE-ova paleta boja</comment>
+ <comment xml:lang="hu">KDE-színséma</comment>
+ <comment xml:lang="ia">Schema de color KDE</comment>
+ <comment xml:lang="id">Skema warna KDE</comment>
+ <comment xml:lang="is">KDE litastef</comment>
+ <comment xml:lang="it">schema di colori di KDE</comment>
+ <comment xml:lang="ja">KDE 色スキーム</comment>
+ <comment xml:lang="kk">KDE түстер сұлбасы</comment>
+ <comment xml:lang="km">គ្រោងពណ៌របស់ KDE</comment>
+ <comment xml:lang="ko">KDE 색 배열</comment>
+ <comment xml:lang="lt">KDE spalvų schema</comment>
+ <comment xml:lang="lv">KDE krāsu shēma</comment>
+ <comment xml:lang="ml">കെഡിഇ നിറക്കൂട്ട്</comment>
+ <comment xml:lang="mr">केडीई रंग सुत्रयोजना</comment>
+ <comment xml:lang="nb">KDE fargeskjema</comment>
+ <comment xml:lang="nds">KDE-Klöörschema</comment>
+ <comment xml:lang="nl">KDE-kleurenschema</comment>
+ <comment xml:lang="nn">KDE-fargeoppsett</comment>
+ <comment xml:lang="pa">KDE ਰੰਗ ਸਕੀਮ</comment>
+ <comment xml:lang="pl">Zestaw kolorów KDE</comment>
+ <comment xml:lang="pt">Esquema de cores do KDE</comment>
+ <comment xml:lang="pt_BR">Esquema de cores do KDE</comment>
+ <comment xml:lang="ro">Schemă de culori KDE</comment>
+ <comment xml:lang="ru">цветовая схема KDE</comment>
+ <comment xml:lang="se">KDE-ivdnečoahkkádus</comment>
+ <comment xml:lang="sk">Farebná schéma KDE</comment>
+ <comment xml:lang="sl">Barvna shema KDE</comment>
+ <comment xml:lang="sr">КДЕ шема боја</comment>
+ <comment xml:lang="sr@ijekavian">КДЕ шема боја</comment>
+ <comment xml:lang="sr@ijekavianlatin">KDE šema boja</comment>
+ <comment xml:lang="sr@latin">KDE šema boja</comment>
+ <comment xml:lang="sv">KDE-färgschema</comment>
+ <comment xml:lang="th">ชุดสีของ KDE</comment>
+ <comment xml:lang="tr">KDE renk şeması</comment>
+ <comment xml:lang="ug">KDE رەڭ لايىھىسى</comment>
+ <comment xml:lang="uk">схема кольорів KDE</comment>
+ <comment xml:lang="zh_CN">KDE 配色方案</comment>
+ <comment xml:lang="zh_TW">KDE 顏色機制</comment>
+ <acronym>KDE</acronym>
+ <expanded-acronym>K Desktop Environment</expanded-acronym>
+ <glob pattern="*.kcsrc"/>
+ </mime-type>
+ <mime-type type="application/x-kns">
+ <sub-class-of type="application/zip"/>
+ <comment>KNewStuff package</comment>
+ <comment xml:lang="ar">حزمة KNewStuff</comment>
+ <comment xml:lang="bs">paket K‑svežih-novotarija</comment>
+ <comment xml:lang="ca">Paquet del KNewStuff</comment>
+ <comment xml:lang="ca@valencia">Paquet del KNewStuff</comment>
+ <comment xml:lang="cs">Balíček KNewStuff</comment>
+ <comment xml:lang="da">KNewStuff-pakke</comment>
+ <comment xml:lang="de">KNewStuff-Paket</comment>
+ <comment xml:lang="el">Πακέτο KNewStuff</comment>
+ <comment xml:lang="en_GB">KNewStuff package</comment>
+ <comment xml:lang="es">Paquete de KNewStuff</comment>
+ <comment xml:lang="et">KNewStuffi pakett</comment>
+ <comment xml:lang="eu">KNewStuff paketea</comment>
+ <comment xml:lang="fi">KNewStuff-paketti</comment>
+ <comment xml:lang="fr">Paquet « KNewStuff »</comment>
+ <comment xml:lang="ga">Pacáiste KNewStuff</comment>
+ <comment xml:lang="gd">pacaid KNewStuff</comment>
+ <comment xml:lang="gl">Paquete de KNewStuff</comment>
+ <comment xml:lang="hr">KNewStuff paket</comment>
+ <comment xml:lang="hu">KNewStuff-csomag</comment>
+ <comment xml:lang="ia">KNewStuff: Pacchetto</comment>
+ <comment xml:lang="id">Paket KNewStuff</comment>
+ <comment xml:lang="is">KNewStuff pakki</comment>
+ <comment xml:lang="it">pacchetto di KNewStuff</comment>
+ <comment xml:lang="ja">KNewStuff パッケージ</comment>
+ <comment xml:lang="kk">KNewStuff дестесі</comment>
+ <comment xml:lang="km">កញ្ចប់ KNewStuff</comment>
+ <comment xml:lang="ko">KNewStuff 패키지</comment>
+ <comment xml:lang="lt">KNewStuff paketas</comment>
+ <comment xml:lang="lv">KNewStuff pakotne</comment>
+ <comment xml:lang="ml">കെന്യൂസ്റ്റഫ് പാക്കേജ്</comment>
+ <comment xml:lang="mr">के-न्यु-स्टफ पॅकेज</comment>
+ <comment xml:lang="nb">KNewStuff-pakke</comment>
+ <comment xml:lang="nds">KNewStuff-Paket</comment>
+ <comment xml:lang="nl">KNewStuff-pakket</comment>
+ <comment xml:lang="nn">KNewStuff-pakke</comment>
+ <comment xml:lang="pa">KNewStuff ਪੈਕੇਜ</comment>
+ <comment xml:lang="pl">Pakiet KNewStuff</comment>
+ <comment xml:lang="pt">Pacote do KNewStuff</comment>
+ <comment xml:lang="pt_BR">Pacote do KNewStuff</comment>
+ <comment xml:lang="ro">pachet KNewStuff</comment>
+ <comment xml:lang="ru">пакет KNewStuff</comment>
+ <comment xml:lang="se">KNewStuff páhkka</comment>
+ <comment xml:lang="sk">Balíček KNewStuff</comment>
+ <comment xml:lang="sl">Paket KNewStuff</comment>
+ <comment xml:lang="sr">пакет К‑свежих-новотарија</comment>
+ <comment xml:lang="sr@ijekavian">пакет К‑свежих-новотарија</comment>
+ <comment xml:lang="sr@ijekavianlatin">paket K‑svežih-novotarija</comment>
+ <comment xml:lang="sr@latin">paket K‑svežih-novotarija</comment>
+ <comment xml:lang="sv">Heta nyheter-paket</comment>
+ <comment xml:lang="th">แพกเกจ KNewStuff</comment>
+ <comment xml:lang="tr">KNewStuff paketi</comment>
+ <comment xml:lang="ug">KNewStuff بوغچا</comment>
+ <comment xml:lang="uk">пакунок KNewStuff</comment>
+ <comment xml:lang="zh_CN">KNewStuff 包</comment>
+ <comment xml:lang="zh_TW">KNewStuff 套件</comment>
+ <glob pattern="*.kns"/>
+ </mime-type>
+ <mime-type type="application/x-kwallet"> <!-- fdo #6326 rejected, will stay KDE-specific -->
+ <comment>KWallet wallet</comment>
+ <comment xml:lang="ar">حافظة KWallet</comment>
+ <comment xml:lang="bg">Портфейл KWallet</comment>
+ <comment xml:lang="bs">K‑novčanikov novčanik</comment>
+ <comment xml:lang="ca">Cartera del KWallet</comment>
+ <comment xml:lang="ca@valencia">Cartera del KWallet</comment>
+ <comment xml:lang="cs">Schránka KWallet</comment>
+ <comment xml:lang="da">Tegnebog til KWallet</comment>
+ <comment xml:lang="de">KWallet-Passwortspeicher</comment>
+ <comment xml:lang="el">Πορτοφόλι KWallet</comment>
+ <comment xml:lang="en_GB">KWallet wallet</comment>
+ <comment xml:lang="es">Cartera de KWallet</comment>
+ <comment xml:lang="et">KWalleti turvalaegas</comment>
+ <comment xml:lang="eu">KWallet zorroa</comment>
+ <comment xml:lang="fi">KWallet-lompakko</comment>
+ <comment xml:lang="fr">Portefeuille KWallet</comment>
+ <comment xml:lang="ga">Sparán KWallet</comment>
+ <comment xml:lang="gd">sporan KWallet</comment>
+ <comment xml:lang="gl">Carteira de KWallet</comment>
+ <comment xml:lang="hr">KWallet lisnica</comment>
+ <comment xml:lang="hu">KWallet-jelszófájl</comment>
+ <comment xml:lang="ia">Kwallet :portafolio</comment>
+ <comment xml:lang="id">Wallet KWallet</comment>
+ <comment xml:lang="is">KWallet veski</comment>
+ <comment xml:lang="it">Portafogli di KDE</comment>
+ <comment xml:lang="ja">KWallet ウォレット</comment>
+ <comment xml:lang="kk">KWallet әмияны</comment>
+ <comment xml:lang="km">កាបូបរបស់ KWallet</comment>
+ <comment xml:lang="ko">KWallet 지갑</comment>
+ <comment xml:lang="lt">KWallet piniginė</comment>
+ <comment xml:lang="lv">KWallet maks</comment>
+ <comment xml:lang="ml">കെവാലറ്റ് മടിശ്ശീല</comment>
+ <comment xml:lang="mr">के-वॉलेट पाकीट</comment>
+ <comment xml:lang="nb">KWallet lommebok</comment>
+ <comment xml:lang="nds">KWallet-Knipp</comment>
+ <comment xml:lang="nl">KWallet-portefeuille</comment>
+ <comment xml:lang="nn">KWallet-lommebok</comment>
+ <comment xml:lang="pa">KWallet ਵਾਲਿਟ</comment>
+ <comment xml:lang="pl">Portfel KDE</comment>
+ <comment xml:lang="pt">Carteira da KWallet</comment>
+ <comment xml:lang="pt_BR">Carteira do KWallet</comment>
+ <comment xml:lang="ro">Portofel KWallet</comment>
+ <comment xml:lang="ru">бумажник KWallet</comment>
+ <comment xml:lang="se">KWallet bursa</comment>
+ <comment xml:lang="sk">KWallet wallet</comment>
+ <comment xml:lang="sl">Listnica Kwallet</comment>
+ <comment xml:lang="sr">К‑новчаников новчаник</comment>
+ <comment xml:lang="sr@ijekavian">К‑новчаников новчаник</comment>
+ <comment xml:lang="sr@ijekavianlatin">K‑novčanikov novčanik</comment>
+ <comment xml:lang="sr@latin">K‑novčanikov novčanik</comment>
+ <comment xml:lang="sv">Kwallet-plånbok</comment>
+ <comment xml:lang="th">กระเป๋าของ 'กระเป๋าคุมข้อมูล-K'</comment>
+ <comment xml:lang="tr">KWallet cüzdanı</comment>
+ <comment xml:lang="ug">KWallet ھەميانى</comment>
+ <comment xml:lang="uk">торбинка KWallet</comment>
+ <comment xml:lang="zh_CN">KWallet 钱包</comment>
+ <comment xml:lang="zh_TW">KWallet 錢包</comment>
+ <magic priority="80">
+ <match type="string" value="KWALLET" offset="0"/>
+ </magic>
+ <glob pattern="*.kwl"/>
+ </mime-type>
+ <mime-type type="application/x-kudesigner">
+ <comment>Kugar report template</comment>
+ <comment xml:lang="ar">قالب تقرير Kugar</comment>
+ <comment xml:lang="bs">Kugarov šablon izvještaja</comment>
+ <comment xml:lang="ca">Plantilla d'informe del Kugar</comment>
+ <comment xml:lang="ca@valencia">Plantilla d'informe del Kugar</comment>
+ <comment xml:lang="cs">Šablona hlášení Kugar</comment>
+ <comment xml:lang="da">Kugar rapportskabelon</comment>
+ <comment xml:lang="de">Kugar-Berichtsvorlage</comment>
+ <comment xml:lang="el">Πρότυπο αναφοράς Kugar</comment>
+ <comment xml:lang="en_GB">Kugar report template</comment>
+ <comment xml:lang="es">Plantilla de informe de Kugar</comment>
+ <comment xml:lang="et">Kugari aruandemall</comment>
+ <comment xml:lang="eu">Kugar txosten-txantiloia</comment>
+ <comment xml:lang="fi">Kugar-raporttipohja</comment>
+ <comment xml:lang="fr">Modèle de rapport Kugar</comment>
+ <comment xml:lang="ga">Teimpléad tuarascála Kugar</comment>
+ <comment xml:lang="gd">teamplaid aithisg Kugar</comment>
+ <comment xml:lang="gl">Modelo de informe de Kugar</comment>
+ <comment xml:lang="hr">Kugar predložak izvještaja</comment>
+ <comment xml:lang="hu">Kugar-jelentéssablon</comment>
+ <comment xml:lang="ia">Kugar : patrono de reporto</comment>
+ <comment xml:lang="id">Template laporan Kugar</comment>
+ <comment xml:lang="is">Kugar skýrslugerðarforsnið</comment>
+ <comment xml:lang="it">modello di rapporto di Kugar</comment>
+ <comment xml:lang="ja">Kugar レポートテンプレート</comment>
+ <comment xml:lang="kk">Kugar есеп беру үлгісі</comment>
+ <comment xml:lang="km">ពុម្ពរបាយការណ៍របស់ Kugar</comment>
+ <comment xml:lang="ko">Kugar 보고서 템플릿</comment>
+ <comment xml:lang="lt">Kugar ataskaitos šablonas</comment>
+ <comment xml:lang="lv">Kugar atskaites sagatave</comment>
+ <comment xml:lang="ml">കുഗാര് അറിയിപ്പ് ഫലകം</comment>
+ <comment xml:lang="mr">कुगर रिपोर्ट नमूना</comment>
+ <comment xml:lang="nb">Kugar rapportmal</comment>
+ <comment xml:lang="nds">Kugar-Berichtvörlaag</comment>
+ <comment xml:lang="nl">Kugar-rapportsjabloon</comment>
+ <comment xml:lang="nn">Rapportmal for Kugar</comment>
+ <comment xml:lang="pa">Kugar ਰਿਪੋਰਟ ਟੈਪਲੇਟ</comment>
+ <comment xml:lang="pl">Szablon raportu Kugara</comment>
+ <comment xml:lang="pt">Modelo de relatórios do Kugar</comment>
+ <comment xml:lang="pt_BR">Modelo de relatório do Kugar</comment>
+ <comment xml:lang="ro">șablon de raport Kugar</comment>
+ <comment xml:lang="ru">шаблон отчёта Kugar</comment>
+ <comment xml:lang="se">Kugar raportamálle</comment>
+ <comment xml:lang="sk">Reportovacia šablóna Kugar</comment>
+ <comment xml:lang="sl">Predloga za poročila Kugar</comment>
+ <comment xml:lang="sr">Кугаров шаблон извештаја</comment>
+ <comment xml:lang="sr@ijekavian">Кугаров шаблон извештаја</comment>
+ <comment xml:lang="sr@ijekavianlatin">Kugarov šablon izveštaja</comment>
+ <comment xml:lang="sr@latin">Kugarov šablon izveštaja</comment>
+ <comment xml:lang="sv">Kugar-rapportmall</comment>
+ <comment xml:lang="th">แม่แบบรายงานของ Kugar</comment>
+ <comment xml:lang="tr">Kugar rapor şablonu</comment>
+ <comment xml:lang="ug">Kugar دوكلات قېلىپى</comment>
+ <comment xml:lang="uk">шаблон звіту Kugar</comment>
+ <comment xml:lang="zh_CN">Kugar 报表模板</comment>
+ <comment xml:lang="zh_TW">Kugar 報告樣本</comment>
+ <glob pattern="*.kut"/>
+ </mime-type>
+ <mime-type type="application/x-plasma">
+ <sub-class-of type="application/zip"/>
+ <comment>plasmoid</comment>
+ <comment xml:lang="ar">بلازمود</comment>
+ <comment xml:lang="bs">plazmoid</comment>
+ <comment xml:lang="ca">Plasmoide</comment>
+ <comment xml:lang="ca@valencia">Plasmoide</comment>
+ <comment xml:lang="cs">plasmoid</comment>
+ <comment xml:lang="da">plasmoid</comment>
+ <comment xml:lang="de">Plasmoid</comment>
+ <comment xml:lang="el">πλασμοειδές</comment>
+ <comment xml:lang="en_GB">plasmoid</comment>
+ <comment xml:lang="es">plasmoide</comment>
+ <comment xml:lang="et">plasmoid</comment>
+ <comment xml:lang="eu">plasmoid-a</comment>
+ <comment xml:lang="fi">plasmoidi</comment>
+ <comment xml:lang="fr">composant graphique</comment>
+ <comment xml:lang="ga">plasmóid</comment>
+ <comment xml:lang="gd">plasmoid</comment>
+ <comment xml:lang="gl">plasmoide</comment>
+ <comment xml:lang="hr">plasmoid</comment>
+ <comment xml:lang="hu">plazmoid</comment>
+ <comment xml:lang="ia">plasmoid</comment>
+ <comment xml:lang="id">plasmoid</comment>
+ <comment xml:lang="is">plasmíð</comment>
+ <comment xml:lang="it">plasmoide</comment>
+ <comment xml:lang="ja">plasmoid</comment>
+ <comment xml:lang="kk">-лері</comment>
+ <comment xml:lang="km">plasmoid</comment>
+ <comment xml:lang="ko">plasmoid</comment>
+ <comment xml:lang="lt">plazmoidas</comment>
+ <comment xml:lang="lv">plazmoīds</comment>
+ <comment xml:lang="ml">പ്ലാസ്മോയിഡ്</comment>
+ <comment xml:lang="mr">प्लाज्मोइड</comment>
+ <comment xml:lang="nb">plasmoid</comment>
+ <comment xml:lang="nds">Plasma-Lüttprogramm</comment>
+ <comment xml:lang="nl">plasmoid</comment>
+ <comment xml:lang="nn">plasmoide</comment>
+ <comment xml:lang="pa">ਪਲਾਜ਼ਮੋਡ</comment>
+ <comment xml:lang="pl">plazmoid</comment>
+ <comment xml:lang="pt">plasmóide</comment>
+ <comment xml:lang="pt_BR">plasmoide</comment>
+ <comment xml:lang="ro">plasmoid</comment>
+ <comment xml:lang="ru">виджет</comment>
+ <comment xml:lang="se">plasmoida</comment>
+ <comment xml:lang="sk">plasmoid</comment>
+ <comment xml:lang="sl">plasmoid</comment>
+ <comment xml:lang="sq">plasmoid</comment>
+ <comment xml:lang="sr">плазмоид</comment>
+ <comment xml:lang="sr@ijekavian">плазмоид</comment>
+ <comment xml:lang="sr@ijekavianlatin">plazmoid</comment>
+ <comment xml:lang="sr@latin">plazmoid</comment>
+ <comment xml:lang="sv">plasmoid</comment>
+ <comment xml:lang="th">พลาสมอยด์</comment>
+ <comment xml:lang="tr">plasma programcığı</comment>
+ <comment xml:lang="ug">plasmoid</comment>
+ <comment xml:lang="uk">плазмоїд</comment>
+ <comment xml:lang="zh_CN">plasmoid</comment>
+ <comment xml:lang="zh_TW">Plasma 小程式</comment>
+ <glob pattern="*.plasmoid"/>
+ </mime-type>
+ <mime-type type="application/x-superkaramba">
+ <sub-class-of type="application/zip"/>
+ <comment>SuperKaramba theme</comment>
+ <comment xml:lang="ar">سمة SuperKaramba</comment>
+ <comment xml:lang="bg">Тема за SuperKaramba</comment>
+ <comment xml:lang="bs">superkaramba tema</comment>
+ <comment xml:lang="ca">Tema del SuperKaramba</comment>
+ <comment xml:lang="ca@valencia">Tema del SuperKaramba</comment>
+ <comment xml:lang="cs">Motiv Superkaramba</comment>
+ <comment xml:lang="da">SuperKaramba-tema</comment>
+ <comment xml:lang="de">SuperKaramba-Design</comment>
+ <comment xml:lang="el">Θέμα SuperKaramba</comment>
+ <comment xml:lang="en_GB">SuperKaramba theme</comment>
+ <comment xml:lang="es">Tema de SuperKaramba</comment>
+ <comment xml:lang="et">SuperKaramba teema</comment>
+ <comment xml:lang="eu">SuperKaramba tema</comment>
+ <comment xml:lang="fi">SuperKaramba-teema</comment>
+ <comment xml:lang="fr">Thème SuperKaramba</comment>
+ <comment xml:lang="ga">Téama SuperKaramba</comment>
+ <comment xml:lang="gd">ùrlar SuperKaramba</comment>
+ <comment xml:lang="gl">Tema de SuperKaramba</comment>
+ <comment xml:lang="hr">tema za SuperKarambu</comment>
+ <comment xml:lang="hu">SuperKaramba-téma</comment>
+ <comment xml:lang="ia">Thema de SuperKaramba</comment>
+ <comment xml:lang="id">Tema SuperKaramba</comment>
+ <comment xml:lang="is">SuperKaramba þema</comment>
+ <comment xml:lang="it">tema di SuperKaramba</comment>
+ <comment xml:lang="ja">SuperKaramba テーマ</comment>
+ <comment xml:lang="kk">SuperKaramba нақышы</comment>
+ <comment xml:lang="km">ស្បែករបស់ SuperKaramba</comment>
+ <comment xml:lang="ko">SuperKaramba 테마</comment>
+ <comment xml:lang="lt">SuperKaramba tema</comment>
+ <comment xml:lang="lv">SuperKaramba tēma</comment>
+ <comment xml:lang="ml">സൂപ്പര്കരാംബ പ്രമേയം</comment>
+ <comment xml:lang="mr">सुपरकरंबा शैली</comment>
+ <comment xml:lang="nb">SuperKaramba tema</comment>
+ <comment xml:lang="nds">SuperKaramba-Muster</comment>
+ <comment xml:lang="nl">SuperKaramba-thema</comment>
+ <comment xml:lang="nn">SuperKaramba-tema</comment>
+ <comment xml:lang="pa">ਸੁਪਰਕਰਾਮਬਾ ਥੀਮ</comment>
+ <comment xml:lang="pl">Motyw SuperKaramby</comment>
+ <comment xml:lang="pt">Tema do SuperKaramba</comment>
+ <comment xml:lang="pt_BR">Tema do SuperKaramba</comment>
+ <comment xml:lang="ro">Temă SuperKaramba</comment>
+ <comment xml:lang="ru">виджет SuperKaramba</comment>
+ <comment xml:lang="se">SuperKaramba-fáddá</comment>
+ <comment xml:lang="sk">Téma SuperKaramba</comment>
+ <comment xml:lang="sl">Tema za SuperKarambo</comment>
+ <comment xml:lang="sr">суперкарамба тема</comment>
+ <comment xml:lang="sr@ijekavian">суперкарамба тема</comment>
+ <comment xml:lang="sr@ijekavianlatin">superkaramba tema</comment>
+ <comment xml:lang="sr@latin">superkaramba tema</comment>
+ <comment xml:lang="sv">Superkaramba-tema</comment>
+ <comment xml:lang="th">ชุดตกแต่งของ SuperKaramba</comment>
+ <comment xml:lang="tr">SuperKaramba teması</comment>
+ <comment xml:lang="ug">SuperKaramba ئۆرنىكى</comment>
+ <comment xml:lang="uk">тема SuperKaramba</comment>
+ <comment xml:lang="zh_CN">SuperKaramba 主题</comment>
+ <comment xml:lang="zh_TW">SuperKaramba 主題</comment>
+ <glob pattern="*.skz"/>
+ </mime-type>
+ <mime-type type="application/x-vnd.kde.plan">
+ <comment>Calligra Plan project management document</comment>
+ <comment xml:lang="ar">وثيقة إدارة مشاريع Calligra Plan</comment>
+ <comment xml:lang="bs">Calligra Plan dokument upravljanja projektima</comment>
+ <comment xml:lang="ca">Document per a la gestió de projectes del Calligra Plan</comment>
+ <comment xml:lang="ca@valencia">Document per a la gestió de projectes del Calligra Plan</comment>
+ <comment xml:lang="da">Calligra Plan projekthåndteringsdokument</comment>
+ <comment xml:lang="de">Calligra-Plan-Projektverwaltungdokument</comment>
+ <comment xml:lang="el">Έγγραφο διαχείρισης έργων Calligra Plan</comment>
+ <comment xml:lang="en_GB">Calligra Plan project management document</comment>
+ <comment xml:lang="es">Documento de gestión de proyecto de Calligra Plan</comment>
+ <comment xml:lang="et">Calligra Plani projektihalduse dokument</comment>
+ <comment xml:lang="eu">Calligra Plan proiektua kudeatzeko dokumentua</comment>
+ <comment xml:lang="fi">Calligra Plan -projektinhallintatiedosto</comment>
+ <comment xml:lang="fr">Document de gestion de projets « Calligra Plan »</comment>
+ <comment xml:lang="ga">Cáipéis Bhainisteoireachta Tionscadail Calligra Plan</comment>
+ <comment xml:lang="gd">sgrìobhainn stiùireadh pròiseict Calligra Plan</comment>
+ <comment xml:lang="gl">Proxecto do Calligra Plan</comment>
+ <comment xml:lang="hr">Calligra Plan, dokument za upravljanje projektom</comment>
+ <comment xml:lang="hu">Calligra Plan projektkezelő dokumentum</comment>
+ <comment xml:lang="ia">Calligra Plan: Documento de gestion de projecto</comment>
+ <comment xml:lang="id">Dokumen pengelolaan proyek Calligra Plan</comment>
+ <comment xml:lang="is">Calligra Plan verkstjórnunarskjal</comment>
+ <comment xml:lang="it">documento di gestione dei progetti di Calligra Plan</comment>
+ <comment xml:lang="ja">Calligra Plan プロジェクト管理文書</comment>
+ <comment xml:lang="kk">Calligra Plan жоба басқару құжаты</comment>
+ <comment xml:lang="km">ឯកសារគ្រប់គ្រងគម្រោងរបស់ Calligra</comment>
+ <comment xml:lang="ko">Caligra Plan 프로젝트 관리 문서</comment>
+ <comment xml:lang="lt">Calligra Plan projektų valdymo dokumentas</comment>
+ <comment xml:lang="lv">Calligra Plan projektu pārvaldības dokuments</comment>
+ <comment xml:lang="ml">കാലിഗ്ര രൂപരേഖ പദ്ധതി നടത്തിയിപ്പ് രേഖ</comment>
+ <comment xml:lang="mr">कॅलिग्रा प्लान परियोजना व्यवस्थापन दस्तऐवज</comment>
+ <comment xml:lang="nb">Calligra Plan prosjekstyringsdokument</comment>
+ <comment xml:lang="nds">Projektpleeg-Dokment för Calligra-Plan</comment>
+ <comment xml:lang="nl">Calligra-plan projectbeheer-document</comment>
+ <comment xml:lang="nn">Prosjekthandsamingsdokument for Calligra Plan</comment>
+ <comment xml:lang="pa">Calligra ਸਕੀਮ ਪ੍ਰੋਜੈਕਟ ਪਰਬੰਧ ਡੌਕੂਮੈਂਟ</comment>
+ <comment xml:lang="pl">Dokument zarządzania projektami w Calligra Plan</comment>
+ <comment xml:lang="pt">Documento de gestão de projectos do Plan para o Calligra</comment>
+ <comment xml:lang="pt_BR">Documento de gerenciamento de projetos do Calligra Plan</comment>
+ <comment xml:lang="ro">document management de proiect Calligra Plan</comment>
+ <comment xml:lang="ru">проект Calligra Plan</comment>
+ <comment xml:lang="se">Calligra Plan-prošeaktahálddašandokumeanta</comment>
+ <comment xml:lang="sk">Dokument riadenia projektov Calligra Plan</comment>
+ <comment xml:lang="sl">Dokument za upravljanje projektov Calligra Plan</comment>
+ <comment xml:lang="sr">документ управљања пројектом Калигриног Плана</comment>
+ <comment xml:lang="sr@ijekavian">документ управљања пројектом Калигриног Плана</comment>
+ <comment xml:lang="sr@ijekavianlatin">dokument upravljanja projektom Calligrinog Plana</comment>
+ <comment xml:lang="sr@latin">dokument upravljanja projektom Calligrinog Plana</comment>
+ <comment xml:lang="sv">Calligra Plan-projekthanteringsdokument</comment>
+ <comment xml:lang="tr">Calligra Plan proje yönetimi belgesi</comment>
+ <comment xml:lang="ug">Calligra Plan قۇرۇلۇش باشقۇرۇش پۈتۈكى</comment>
+ <comment xml:lang="uk">документ керування роботами Plan зі складу Calligra</comment>
+ <comment xml:lang="zh_CN">Calligra Plan 项目管理文档</comment>
+ <comment xml:lang="zh_TW">Calligra Plan 專案管理文件</comment>
+ <glob pattern="*.plan"/>
+ </mime-type>
+ <mime-type type="application/x-vnd.kde.plan.work">
+ <comment>Calligra Plan work package document</comment>
+ <comment xml:lang="ar">وثيقة حزمة عمل Calligra Plan</comment>
+ <comment xml:lang="bs">Calligra Plan dokument radnog paketa</comment>
+ <comment xml:lang="ca">Document de paquet de treball del Calligra Plan</comment>
+ <comment xml:lang="ca@valencia">Document de paquet de treball del Calligra Plan</comment>
+ <comment xml:lang="da">Calligra Plan Work Package-dokument</comment>
+ <comment xml:lang="de">Calligra-Plan-Arbeitspaketdokument</comment>
+ <comment xml:lang="el">Έγγραφο πακέτου εργασίας Calligra Plan</comment>
+ <comment xml:lang="en_GB">Calligra Plan work package document</comment>
+ <comment xml:lang="es">Documento de paquete de trabajo de Calligra Plan</comment>
+ <comment xml:lang="et">Calligra Plani töösuuna dokument</comment>
+ <comment xml:lang="eu">Calligra Plan lanerako pakete dokumentua</comment>
+ <comment xml:lang="fi">Calligra Plan -työpakettitiedosto</comment>
+ <comment xml:lang="fr">Document de lots de travaux pour « Calligra Plan »</comment>
+ <comment xml:lang="ga">Cáipéis phacáiste oibre Calligra Plan</comment>
+ <comment xml:lang="gd">sgrìobhainn pacaid obrach Calligra Plan</comment>
+ <comment xml:lang="gl">Paquete de traballo do Calligra Plan</comment>
+ <comment xml:lang="hr">Calligra Plan, dokument za radni paket</comment>
+ <comment xml:lang="hu">Calligra Plan munkacsomag dokumentum</comment>
+ <comment xml:lang="ia">Documento de pacchetto de labor de Calligra Plan</comment>
+ <comment xml:lang="id">Dokumen pemaketan kerja Calligra Plan</comment>
+ <comment xml:lang="is">Calligra Plan verkpakkaskjal</comment>
+ <comment xml:lang="it">documento dei pacchetti di lavoro di Calligra Plan</comment>
+ <comment xml:lang="kk">Calligra Plan жұмыс дестесі</comment>
+ <comment xml:lang="km">ឯកសារកញ្ចប់ការងារផែនការរបស់ Calligra</comment>
+ <comment xml:lang="ko">Caligra Plan 작업 패키지 문서</comment>
+ <comment xml:lang="lt">Calligra Plan darbo paketo dokumentas</comment>
+ <comment xml:lang="lv">Calligra Plan darba pakotnes dokuments</comment>
+ <comment xml:lang="ml">കാലിഗ്ര രൂപരേഖ പാക്കേജ് രേഖ</comment>
+ <comment xml:lang="mr">कॅलिग्रा प्लान कार्य पॅकेज दस्तऐवज</comment>
+ <comment xml:lang="nb">Calligra Plan arbeidspakkedokument</comment>
+ <comment xml:lang="nds">Arbeitpaket-Dokment för Calligra-Plan</comment>
+ <comment xml:lang="nl">Calligra-plan werkpakket document</comment>
+ <comment xml:lang="nn">Arbeidspakkedokument for Calligra Plan</comment>
+ <comment xml:lang="pl">Dokument zawierający pakiet zadań Calligra Plan</comment>
+ <comment xml:lang="pt">Documento de pacote de trabalho do Plan para o Calligra</comment>
+ <comment xml:lang="pt_BR">Documento do pacote de trabalho do Calligra Plan</comment>
+ <comment xml:lang="ro">sarcină de lucru management de proiect Calligra Plan</comment>
+ <comment xml:lang="ru">пакет работ Calligra Plan</comment>
+ <comment xml:lang="se">Calligra Plan-bargopáhkkendokumeanta</comment>
+ <comment xml:lang="sk">Dokument riadenia pracovných balíkov Calligra Plan</comment>
+ <comment xml:lang="sl">Dokument delovnega paketa Calligra Plan</comment>
+ <comment xml:lang="sr">документ радног пакета Калигриног Плана</comment>
+ <comment xml:lang="sr@ijekavian">документ радног пакета Калигриног Плана</comment>
+ <comment xml:lang="sr@ijekavianlatin">dokument radnog paketa Calligrinog Plana</comment>
+ <comment xml:lang="sr@latin">dokument radnog paketa Calligrinog Plana</comment>
+ <comment xml:lang="sv">Calligra Plan-arbetspaketsdokument</comment>
+ <comment xml:lang="tr">Calligra Plan iş paketi belgesi</comment>
+ <comment xml:lang="ug">Calligra Plan خىزمەت بوغچا پۈتۈكى</comment>
+ <comment xml:lang="uk">пакунок роботи Plan зі складу Calligra</comment>
+ <comment xml:lang="zh_CN">Calligra Plan 工作包文档</comment>
+ <comment xml:lang="zh_TW">Calligra Plan 工作套件文件</comment>
+ <glob pattern="*.planwork"/>
+ </mime-type>
+ <mime-type type="application/x-vnd.kde.kplato">
+ <comment>KPlato project management document</comment>
+ <comment xml:lang="ar">وثيقة إدارة مشاريع KPlato</comment>
+ <comment xml:lang="bs">KPlatoov dokument upravljanja projektom</comment>
+ <comment xml:lang="ca">Document per a la gestió de projectes del KPlato</comment>
+ <comment xml:lang="ca@valencia">Document per a la gestió de projectes del KPlato</comment>
+ <comment xml:lang="cs">Dokument řízení projektů v KPlato</comment>
+ <comment xml:lang="da">KPlato projekthåndteringsdokument</comment>
+ <comment xml:lang="de">KPlato-Projektverwaltungs-Dokument</comment>
+ <comment xml:lang="el">Έγγραφα διαχείρισης έργων KPlato</comment>
+ <comment xml:lang="en_GB">KPlato project management document</comment>
+ <comment xml:lang="es">Documento de gestión de proyecto de KPlato</comment>
+ <comment xml:lang="et">KPlato projektihalduse dokument</comment>
+ <comment xml:lang="eu">KPlato proiektu kudeaketa dokumentua</comment>
+ <comment xml:lang="fi">KPLato-projektinhallintatiedosto</comment>
+ <comment xml:lang="fr">Document de gestion de projets KPlato</comment>
+ <comment xml:lang="ga">Cáipéis Bhainisteoireachta Tionscadail KPlato</comment>
+ <comment xml:lang="gd">sgrìobhainn stiùireadh pròiseict KPlato</comment>
+ <comment xml:lang="gl">Proxecto de KPlato</comment>
+ <comment xml:lang="hr">KPlato dokument upravljanja projektom</comment>
+ <comment xml:lang="hu">KPlato projektkezelő dokumentum</comment>
+ <comment xml:lang="ia">KPlato: Documento de gestion de projecto</comment>
+ <comment xml:lang="id">Dokumen pengelolaan proyek KPlato</comment>
+ <comment xml:lang="is">KPlato verkstjórnunarskjal</comment>
+ <comment xml:lang="it">documento di gestione dei progetti di KPlato</comment>
+ <comment xml:lang="ja">KPlato プロジェクト管理文書</comment>
+ <comment xml:lang="kk">KPlato жоба басқару құжаты</comment>
+ <comment xml:lang="km">ឯកសារគ្រប់គ្រងគម្រោងរបស់ KPlato</comment>
+ <comment xml:lang="ko">KPlato 프로젝트 관리 문서</comment>
+ <comment xml:lang="lt">KPlato projektų valdymo dokumentas</comment>
+ <comment xml:lang="lv">KPlato projektu pārvaldības dokuments</comment>
+ <comment xml:lang="ml">കെപ്ലേറ്റോ പദ്ധതി നടത്തിയിപ്പ് രേഖ</comment>
+ <comment xml:lang="mr">के-प्लेटो परियोजना व्यवस्थापन दस्तऐवज</comment>
+ <comment xml:lang="nb">KPlato prosjekstyringsdokument</comment>
+ <comment xml:lang="nds">Projektpleeg-Dokment för KPlato</comment>
+ <comment xml:lang="nl">KPlato projectbeheer-document</comment>
+ <comment xml:lang="nn">KPlato-prosjekthandsamingsdokument</comment>
+ <comment xml:lang="pa">KPlato ਪਰੋਜੈਕਟ ਪਰਬੰਧ ਡੌਕੂਮੈਂਟ</comment>
+ <comment xml:lang="pl">Dokument zarządzania projektami w KPlato</comment>
+ <comment xml:lang="pt">Documento de gestão de projectos do KPlato</comment>
+ <comment xml:lang="pt_BR">Documento de gerenciamento de projetos do KPlato</comment>
+ <comment xml:lang="ro">document management de proiect KPlato</comment>
+ <comment xml:lang="ru">проект KPlato</comment>
+ <comment xml:lang="se">KPlato prošeaktahálddašandokumeanta</comment>
+ <comment xml:lang="sk">Dokument riadenia projektov v KPlato</comment>
+ <comment xml:lang="sl">Dokument za upravljanje projektov KPlato</comment>
+ <comment xml:lang="sr">К‑платоов документ управљања пројектом</comment>
+ <comment xml:lang="sr@ijekavian">К‑платоов документ управљања пројектом</comment>
+ <comment xml:lang="sr@ijekavianlatin">KPlatoov dokument upravljanja projektom</comment>
+ <comment xml:lang="sr@latin">KPlatoov dokument upravljanja projektom</comment>
+ <comment xml:lang="sv">Kplato-projekthantering dokument</comment>
+ <comment xml:lang="tr">KPlato proje yönetimi belgesi</comment>
+ <comment xml:lang="ug">KPlato قۇرۇلۇش باشقۇرۇش پۈتۈكى</comment>
+ <comment xml:lang="uk">документ керування роботами KPlato</comment>
+ <comment xml:lang="zh_CN">KPlato 项目管理文档</comment>
+ <comment xml:lang="zh_TW">KPlato 專案管理文件</comment>
+ <glob pattern="*.kplato"/>
+ </mime-type>
+ <mime-type type="application/x-vnd.kde.kplato.work">
+ <comment>KPlato project management work package</comment>
+ <comment xml:lang="ar">حزمة عمل إدارة مشاريع KPlato</comment>
+ <comment xml:lang="bs">KPlatoov radni paket upravljanja projektom</comment>
+ <comment xml:lang="ca">Paquet de treball per a la gestió de projectes del KPlato</comment>
+ <comment xml:lang="ca@valencia">Paquet de treball per a la gestió de projectes del KPlato</comment>
+ <comment xml:lang="cs">Pracovní balíček řízení projektů v KPlato</comment>
+ <comment xml:lang="da">KPlato work-pakke til projekthåndtering</comment>
+ <comment xml:lang="de">KPlato-Projektverwaltungs-Arbeitspaket</comment>
+ <comment xml:lang="el">Πακέτο εργασιών διαχείρισης έργων KPlato</comment>
+ <comment xml:lang="en_GB">KPlato project management work package</comment>
+ <comment xml:lang="es">Paquete de trabajo de gestión de proyecto de KPlato</comment>
+ <comment xml:lang="et">KPlato projektihalduse tööpakett</comment>
+ <comment xml:lang="eu">KPlato proiektu kudeaketa lan paketea</comment>
+ <comment xml:lang="fi">KPlato-projektinhallinnan työpaketti</comment>
+ <comment xml:lang="fr">Lots de travaux pour le logiciel de gestion de projets KPlato</comment>
+ <comment xml:lang="ga">Pacáiste oibre bainisteoireachta tionscadail KPlato</comment>
+ <comment xml:lang="gd">sgrìobhainn pacaid obrach KPlato</comment>
+ <comment xml:lang="gl">Paquete de traballo de KPlato</comment>
+ <comment xml:lang="hr">KPlato radni paket upravljanja projektom</comment>
+ <comment xml:lang="hu">KPlato projektkezelő munkacsomag</comment>
+ <comment xml:lang="ia">KPlato: Pacchetto de travalio de gestion de projecto</comment>
+ <comment xml:lang="id">Paket kerja pengelolaan proyek KPlato</comment>
+ <comment xml:lang="is">KPlato verkstjórnunar vinnupakki</comment>
+ <comment xml:lang="it">pacchetto di lavoro di gestione dei progetti di KPlato</comment>
+ <comment xml:lang="ja">KPlato プロジェクト管理作業パッケージ</comment>
+ <comment xml:lang="kk">KPlato жоба басқару жұмыс дестесі</comment>
+ <comment xml:lang="km">កញ្ចប់ការងារគ្រប់គ្រងគម្រោង KPlato</comment>
+ <comment xml:lang="ko">KPlato 프로젝트 관리 작업 패키지</comment>
+ <comment xml:lang="lt">KPlato projektų valdymo darbo paketas</comment>
+ <comment xml:lang="lv">KPlato projektu pārvaldības darba pakotne</comment>
+ <comment xml:lang="ml">കെപ്ലേറ്റോ പദ്ധതി നടത്തിയിപ്പ് ജോലി രേഖ</comment>
+ <comment xml:lang="mr">के-प्लेटो परियोजना व्यवस्थापन कार्य पॅकेज</comment>
+ <comment xml:lang="nb">KPlato arbeidspakke for prosjektstyring</comment>
+ <comment xml:lang="nds">Projektpleeg-Arbeitpaket för KPlato</comment>
+ <comment xml:lang="nl">KPlato projectbeheer-werkpakket</comment>
+ <comment xml:lang="nn">KPlato-prosjekthandsamingsarbeidspakke</comment>
+ <comment xml:lang="pa">KPlato ਪਰੋਜੈਕਟ ਮੈਨੇਜਮੈਂਟ ਵਰਕ ਪੈਕੇਜ</comment>
+ <comment xml:lang="pl">Pakiet pracy dot. zarządzania projektami KPlato</comment>
+ <comment xml:lang="pt">Pacote de trabalho de gestão de projectos do KPlato</comment>
+ <comment xml:lang="pt_BR">Pacote de trabalho de gerenciamento de projetos do KPlato</comment>
+ <comment xml:lang="ro">sarcină de lucru management de proiect KPlato</comment>
+ <comment xml:lang="ru">пакет работ KPlato</comment>
+ <comment xml:lang="se">KPlato-prošeaktahálddašan bargopáhkka</comment>
+ <comment xml:lang="sk">Pracovný balíček riadenia projektov v KPlato</comment>
+ <comment xml:lang="sl">Delovni paket projektnega vodenja KPlato</comment>
+ <comment xml:lang="sr">К‑платоов радни пакет управљања пројектом</comment>
+ <comment xml:lang="sr@ijekavian">К‑платоов радни пакет управљања пројектом</comment>
+ <comment xml:lang="sr@ijekavianlatin">KPlatoov radni paket upravljanja projektom</comment>
+ <comment xml:lang="sr@latin">KPlatoov radni paket upravljanja projektom</comment>
+ <comment xml:lang="sv">Kplato-projekthantering arbetspaket</comment>
+ <comment xml:lang="tr">KPlato proje yönetimi çalışma paketi</comment>
+ <comment xml:lang="ug">KPlato قۇرۇلۇش باشقۇرۇش خىزمەت بوغچىسى</comment>
+ <comment xml:lang="uk">пакунок проекту керування роботами KPlato</comment>
+ <comment xml:lang="zh_CN">KPlato 项目管理工作包</comment>
+ <comment xml:lang="zh_TW">KPlato 專案管理工作套件</comment>
+ <glob pattern="*.kplatowork"/>
+ </mime-type>
+ <mime-type type="application/x-vnd.kde.kugar.mixed">
+ <comment>Kugar archive</comment>
+ <comment xml:lang="ar">أرشيف Kugar</comment>
+ <comment xml:lang="bs">Kugarova arhiva</comment>
+ <comment xml:lang="ca">Arxiu del Kugar</comment>
+ <comment xml:lang="ca@valencia">Arxiu del Kugar</comment>
+ <comment xml:lang="cs">Archiv Kugar</comment>
+ <comment xml:lang="da">Kugar-arkiv</comment>
+ <comment xml:lang="de">Kugar-Archiv</comment>
+ <comment xml:lang="el">Αρχειοθήκη Kugar</comment>
+ <comment xml:lang="en_GB">Kugar archive</comment>
+ <comment xml:lang="es">Archivo de Kugar</comment>
+ <comment xml:lang="et">Kugari arhiiv</comment>
+ <comment xml:lang="eu">Kugar artxiboa</comment>
+ <comment xml:lang="fi">Kugar-arkisto</comment>
+ <comment xml:lang="fr">Archive Kugar</comment>
+ <comment xml:lang="ga">Cartlann Kugar</comment>
+ <comment xml:lang="gd">tasglann Kugar</comment>
+ <comment xml:lang="gl">Arquivo de Kugar</comment>
+ <comment xml:lang="hr">Kugar arhiva</comment>
+ <comment xml:lang="hu">Kugar-archívum</comment>
+ <comment xml:lang="ia">Kugar : archivo</comment>
+ <comment xml:lang="id">Arsip Kugar</comment>
+ <comment xml:lang="is">Kugar safnskrá</comment>
+ <comment xml:lang="it">archivio di Kugar</comment>
+ <comment xml:lang="ja">Kugar アーカイブ</comment>
+ <comment xml:lang="kk">Kugar архиві</comment>
+ <comment xml:lang="km">ប័ណ្ណសារ Kugar</comment>
+ <comment xml:lang="ko">Kugar 압축 파일</comment>
+ <comment xml:lang="lt">Kugar archyvas</comment>
+ <comment xml:lang="lv">Kugar arhīvs</comment>
+ <comment xml:lang="ml">കുഗര് ശേഖരം</comment>
+ <comment xml:lang="mr">कुगर संग्रह</comment>
+ <comment xml:lang="nb">Kugar-arkiv</comment>
+ <comment xml:lang="nds">Kugar-Archiev</comment>
+ <comment xml:lang="nl">Kugar-archief</comment>
+ <comment xml:lang="nn">Kugar-arkiv</comment>
+ <comment xml:lang="pa">Kugar ਅਕਾਇਵ</comment>
+ <comment xml:lang="pl">Archiwum Kugara</comment>
+ <comment xml:lang="pt">Pacote do Kugar</comment>
+ <comment xml:lang="pt_BR">Arquivo do Kugar</comment>
+ <comment xml:lang="ro">Arhivă Kugar</comment>
+ <comment xml:lang="ru">архив Kugar</comment>
+ <comment xml:lang="se">Kugararkiiva</comment>
+ <comment xml:lang="sk">Archív Kugar</comment>
+ <comment xml:lang="sl">Arhiv Kugarja</comment>
+ <comment xml:lang="sr">Кугарова архива</comment>
+ <comment xml:lang="sr@ijekavian">Кугарова архива</comment>
+ <comment xml:lang="sr@ijekavianlatin">Kugarova arhiva</comment>
+ <comment xml:lang="sr@latin">Kugarova arhiva</comment>
+ <comment xml:lang="sv">Kugar-arkiv</comment>
+ <comment xml:lang="tr">Kugar arşivi</comment>
+ <comment xml:lang="ug">Kugar ئارخىپى</comment>
+ <comment xml:lang="uk">архів Kugar</comment>
+ <comment xml:lang="zh_CN">Kugar 归档</comment>
+ <comment xml:lang="zh_TW">Kugar 歸檔</comment>
+ <glob pattern="*.kug"/>
+ </mime-type>
+ <mime-type type="application/x-webarchive">
+ <sub-class-of type="application/x-compressed-tar"/>
+ <sub-class-of type="application/x-gzip"/> <!-- only necessary because x-compressed-tar is not specifying this sub-class-of (shared-mime-info 0.8) -->
+ <comment>web archive</comment>
+ <comment xml:lang="ar">أرشيف ويب</comment>
+ <comment xml:lang="bs">veb arhiva</comment>
+ <comment xml:lang="ca">Arxiu web</comment>
+ <comment xml:lang="ca@valencia">Arxiu web</comment>
+ <comment xml:lang="cs">webový archiv</comment>
+ <comment xml:lang="da">Webarkiv</comment>
+ <comment xml:lang="de">Web-Archiv</comment>
+ <comment xml:lang="el">Ιστοσελίδας αρχειοθήκη</comment>
+ <comment xml:lang="en_GB">web archive</comment>
+ <comment xml:lang="es">archivo web</comment>
+ <comment xml:lang="et">veebiarhiiv</comment>
+ <comment xml:lang="eu">web artxiboa</comment>
+ <comment xml:lang="fi">web-arkisto</comment>
+ <comment xml:lang="fr">Archive Web</comment>
+ <comment xml:lang="ga">cartlann ghréasáin</comment>
+ <comment xml:lang="gd">tasglann-lìn</comment>
+ <comment xml:lang="gl">arquivo web</comment>
+ <comment xml:lang="hr">web arhiva</comment>
+ <comment xml:lang="hu">webes archívum</comment>
+ <comment xml:lang="ia">archivo web</comment>
+ <comment xml:lang="id">arsip web</comment>
+ <comment xml:lang="is">vefsafnskrá</comment>
+ <comment xml:lang="it">archivio Web</comment>
+ <comment xml:lang="ja">ウェブアーカイブ</comment>
+ <comment xml:lang="kk">веб архиві</comment>
+ <comment xml:lang="km">ប័ណ្ណសារបណ្ដាញ</comment>
+ <comment xml:lang="ko">웹 압축 파일</comment>
+ <comment xml:lang="lt">žiniatinklio archyvas</comment>
+ <comment xml:lang="lv">tīmekļa arhīvs</comment>
+ <comment xml:lang="ml">വെബ് ശേഖരണം</comment>
+ <comment xml:lang="mr">वेब संग्रह</comment>
+ <comment xml:lang="nb">nettarkiv</comment>
+ <comment xml:lang="nds">Nettarchiev</comment>
+ <comment xml:lang="nl">webarchief</comment>
+ <comment xml:lang="nn">vevarkiv</comment>
+ <comment xml:lang="pa">ਵੈੱਬ ਅਕਾਇਵ</comment>
+ <comment xml:lang="pl">archiwum WWW</comment>
+ <comment xml:lang="pt">pacote Web</comment>
+ <comment xml:lang="pt_BR">Arquivo Web</comment>
+ <comment xml:lang="ro">arhivă web</comment>
+ <comment xml:lang="ru">веб-архив</comment>
+ <comment xml:lang="se">fierbmearkiiva</comment>
+ <comment xml:lang="sk">webový archív</comment>
+ <comment xml:lang="sl">spletni arhiv</comment>
+ <comment xml:lang="sr">веб архива</comment>
+ <comment xml:lang="sr@ijekavian">веб архива</comment>
+ <comment xml:lang="sr@ijekavianlatin">veb arhiva</comment>
+ <comment xml:lang="sr@latin">veb arhiva</comment>
+ <comment xml:lang="sv">webbarkiv</comment>
+ <comment xml:lang="th">แฟ้มจัดเก็บของหน้าเว็บ</comment>
+ <comment xml:lang="tr">web arşivi</comment>
+ <comment xml:lang="ug">تور بەت ئارخىپى</comment>
+ <comment xml:lang="uk">вебархів</comment>
+ <comment xml:lang="zh_CN">网页归档</comment>
+ <comment xml:lang="zh_TW">網頁歸檔</comment>
+ <glob pattern="*.war"/>
+ </mime-type>
+ <mime-type type="application/xsd"> <!-- fdo s-m-i adds *.xsd to application/xml, i.e. no subclass. Good enough? This here creates a glob conflict... -->
+ <sub-class-of type="application/xml"/>
+ <comment>W3C XML schema</comment>
+ <comment xml:lang="ar">مخطط W3C XML</comment>
+ <comment xml:lang="bs">W3C‑ova XML šema</comment>
+ <comment xml:lang="ca">Esquema XML de la W3C</comment>
+ <comment xml:lang="ca@valencia">Esquema XML de la W3C</comment>
+ <comment xml:lang="cs">W3C XML schéma</comment>
+ <comment xml:lang="da">W3C XML-skema</comment>
+ <comment xml:lang="de">W3C-XML-Schema</comment>
+ <comment xml:lang="el">Σχήμα W3C XML</comment>
+ <comment xml:lang="en_GB">W3C XML schema</comment>
+ <comment xml:lang="es">Esquema XML del W3C</comment>
+ <comment xml:lang="et">W3C XML-skeem</comment>
+ <comment xml:lang="eu">W3C XML eskema</comment>
+ <comment xml:lang="fi">W3C XML -skeema</comment>
+ <comment xml:lang="fr">Schéma XML W3C</comment>
+ <comment xml:lang="ga">Scéimre XML W3C</comment>
+ <comment xml:lang="gd">sgeama XML W3C</comment>
+ <comment xml:lang="gl">Esquema XML do W3C</comment>
+ <comment xml:lang="hr">W3C XML shema</comment>
+ <comment xml:lang="hu">W3C XML-séma</comment>
+ <comment xml:lang="ia">schema XML de W3C</comment>
+ <comment xml:lang="id">Skema XML W3C</comment>
+ <comment xml:lang="is">W3C XML skema</comment>
+ <comment xml:lang="it">Schema XML del W3C</comment>
+ <comment xml:lang="ja">W3C XML スキーマ</comment>
+ <comment xml:lang="kk">W3C XML сұлбасы</comment>
+ <comment xml:lang="km">គ្រោងការណ៍របស់ W3C XML</comment>
+ <comment xml:lang="ko">W3C XML 스키마</comment>
+ <comment xml:lang="lt">W3C XML schema</comment>
+ <comment xml:lang="lv">W3C XML shēma</comment>
+ <comment xml:lang="ml">ഡബ്ള്യു 3 സി എക്സ് എം എല് രേഖ</comment>
+ <comment xml:lang="mr">W3C XML स्कीमा</comment>
+ <comment xml:lang="nb">W3C XML-skjema</comment>
+ <comment xml:lang="nds">W3C XML-Schema</comment>
+ <comment xml:lang="nl">W3C XML-schema</comment>
+ <comment xml:lang="nn">W3C XML-skjema</comment>
+ <comment xml:lang="pa">W3C XML ਸਕੀਮਾ</comment>
+ <comment xml:lang="pl">Schemat W3C XML</comment>
+ <comment xml:lang="pt">Esquema XML da W3C</comment>
+ <comment xml:lang="pt_BR">Esquema XML da W3C</comment>
+ <comment xml:lang="ro">Schemă XML W3C</comment>
+ <comment xml:lang="ru">структура XML Schema</comment>
+ <comment xml:lang="se">W3C XML-čoahkkádus</comment>
+ <comment xml:lang="sk">Schéma W3C XML</comment>
+ <comment xml:lang="sl">Shema W3C XML</comment>
+ <comment xml:lang="sr">В3Ц‑ова ИксМЛ шема</comment>
+ <comment xml:lang="sr@ijekavian">В3Ц‑ова ИксМЛ шема</comment>
+ <comment xml:lang="sr@ijekavianlatin">W3C‑ova XML šema</comment>
+ <comment xml:lang="sr@latin">W3C‑ova XML šema</comment>
+ <comment xml:lang="sv">W3C XML-schema</comment>
+ <comment xml:lang="tr">W3C XML şeması</comment>
+ <comment xml:lang="ug">W3C XML لايىھە</comment>
+ <comment xml:lang="uk">схема XML W3C</comment>
+ <comment xml:lang="zh_CN">W3C XML 结构定义</comment>
+ <comment xml:lang="zh_TW">W3C XML 機制</comment>
+ <glob pattern="*.xsd"/>
+ </mime-type>
+ <mime-type type="audio/x-pn-realaudio-plugin"> <!-- Not a type of file, so will not go to shared-mime-info -->
+ <comment>RealAudio plugin file</comment>
+ <comment xml:lang="ar">ملف ملحق RealAudio</comment>
+ <comment xml:lang="bs">RealAudio priključak</comment>
+ <comment xml:lang="ca">Fitxer del connector RealAudio</comment>
+ <comment xml:lang="ca@valencia">Fitxer del connector RealAudio</comment>
+ <comment xml:lang="cs">Soubor modulu RealAudio</comment>
+ <comment xml:lang="da">RealAudio plugin-fil</comment>
+ <comment xml:lang="de">RealAudio-Moduldatei</comment>
+ <comment xml:lang="el">Πρόσθετο αρχείο RealAudio</comment>
+ <comment xml:lang="en_GB">RealAudio plugin file</comment>
+ <comment xml:lang="es">Archivo de complemento RealAudio</comment>
+ <comment xml:lang="et">RealAudio plugina fail</comment>
+ <comment xml:lang="eu">RealAudio plugin fitxategia</comment>
+ <comment xml:lang="fi">RealAudio-liitännäistiedosto</comment>
+ <comment xml:lang="fr">Fichier de module externe « Real-Audio »</comment>
+ <comment xml:lang="ga">Comhad breiseáin RealAudio</comment>
+ <comment xml:lang="gd">faidhle plugan RealAudio</comment>
+ <comment xml:lang="gl">Ficheiro de complemento de RealAudio</comment>
+ <comment xml:lang="hr">priključna datoteka za RealAudio</comment>
+ <comment xml:lang="hu">RealAudio-bővítményfájl</comment>
+ <comment xml:lang="ia">RealAudio: File de plugin</comment>
+ <comment xml:lang="id">File Plugin RealAudio</comment>
+ <comment xml:lang="is">RealAudio plugin skrá</comment>
+ <comment xml:lang="it">file di estensioni RealAudio</comment>
+ <comment xml:lang="ja">RealAudio プラグインファイル</comment>
+ <comment xml:lang="kk">RealAudio плагин файлы</comment>
+ <comment xml:lang="km">ឯកសារកម្មវិធីជំនួយ RealAudio</comment>
+ <comment xml:lang="ko">RealAudio 플러그인 파일</comment>
+ <comment xml:lang="lt">RealAudio papildinio failas</comment>
+ <comment xml:lang="lv">RealAudio spraudņa fails</comment>
+ <comment xml:lang="ml">റിയല് ശബ്ദ സംയോജക ഫയല്</comment>
+ <comment xml:lang="mr">रियल ऑडिओ प्लगइन फाईल</comment>
+ <comment xml:lang="nb">RealAudio programtilleggsfil</comment>
+ <comment xml:lang="nds">RealAudio-Moduuldatei</comment>
+ <comment xml:lang="nl">RealAudio-bestand</comment>
+ <comment xml:lang="nn">RealAudio-programtilleggfil</comment>
+ <comment xml:lang="pa">RealAudio ਪਲੱਗਇਨ ਫਾਈਲ</comment>
+ <comment xml:lang="pl">Plik wtyczki RealAudio</comment>
+ <comment xml:lang="pt">Ficheiro de 'plugin' do RealAudio</comment>
+ <comment xml:lang="pt_BR">Arquivo de plugin do RealAudio</comment>
+ <comment xml:lang="ro">Fișier modul RealAudio</comment>
+ <comment xml:lang="ru">файл расширения RealAudio</comment>
+ <comment xml:lang="se">RealAudio-lassemodulafiila</comment>
+ <comment xml:lang="sk">Súbor modulu RealAudio</comment>
+ <comment xml:lang="sl">Datoteka vstavka RealAudio</comment>
+ <comment xml:lang="sr">Реалаудио прикључак</comment>
+ <comment xml:lang="sr@ijekavian">Реалаудио прикључак</comment>
+ <comment xml:lang="sr@ijekavianlatin">RealAudio priključak</comment>
+ <comment xml:lang="sr@latin">RealAudio priključak</comment>
+ <comment xml:lang="sv">Realaudio-insticksprogramfil</comment>
+ <comment xml:lang="th">แฟ้มส่วนเสริม RealAudio</comment>
+ <comment xml:lang="tr">RealAudio eklenti dosyası</comment>
+ <comment xml:lang="ug">RealAudio قىستۇرما ھۆججەت</comment>
+ <comment xml:lang="uk">файл додатка RealAudio</comment>
+ <comment xml:lang="zh_CN">RealAudio 插件文件</comment>
+ <comment xml:lang="zh_TW">RealAudio 外掛程式檔案</comment>
+ </mime-type>
+ <mime-type type="application/vnd.kde.kphotoalbum-import"> <!-- fdo #12732 rejected, will stay KDE-specific -->
+ <comment>KPhotoAlbum import</comment>
+ <comment xml:lang="ar">استيراد KPhotoAlbum</comment>
+ <comment xml:lang="bs">KPhotoAlbumov uvoz</comment>
+ <comment xml:lang="ca">Importació del KPhotoAlbum</comment>
+ <comment xml:lang="ca@valencia">Importació del KPhotoAlbum</comment>
+ <comment xml:lang="cs">Import KPhotoAlbum</comment>
+ <comment xml:lang="da">KPhotoAlbum import</comment>
+ <comment xml:lang="de">KPhotoAlbum-Import</comment>
+ <comment xml:lang="el">Εισαγωγή KPhotoAlbum</comment>
+ <comment xml:lang="en_GB">KPhotoAlbum import</comment>
+ <comment xml:lang="es">Importación de KPhotoAlbum</comment>
+ <comment xml:lang="et">KPhotoAlbumi import</comment>
+ <comment xml:lang="eu">KPhotoAlbum inportazioa</comment>
+ <comment xml:lang="fi">KPhotoAlbum-tuonti</comment>
+ <comment xml:lang="fr">Importation de KPhotoAlbum</comment>
+ <comment xml:lang="ga">Iompórtáil KPhotoAlbum</comment>
+ <comment xml:lang="gd">ion-phortadh KPhotoAlbum</comment>
+ <comment xml:lang="gl">Importación de KPhotoAlbum</comment>
+ <comment xml:lang="hr">KPhotoAlbum uvoz</comment>
+ <comment xml:lang="hu">KPhotoAlbum-import</comment>
+ <comment xml:lang="ia">Importation de KPhotoAlbum</comment>
+ <comment xml:lang="id">Impor KPhotoAlbum</comment>
+ <comment xml:lang="is">KPhotoAlbum innflutningur</comment>
+ <comment xml:lang="it">importazione di KPhotoAlbum</comment>
+ <comment xml:lang="ja">KPhotoAlbum インポート</comment>
+ <comment xml:lang="kk">KPhotoAlbum импорт еткені</comment>
+ <comment xml:lang="km">នាំចូល KPhotoAlbum</comment>
+ <comment xml:lang="ko">KPhotoAlbum 가져오기</comment>
+ <comment xml:lang="lt">KPhotoAlbum importas</comment>
+ <comment xml:lang="lv">KPhotoAlbum imports</comment>
+ <comment xml:lang="ml">കെഫോട്ടോആല്ബം ഇറക്കുമതി</comment>
+ <comment xml:lang="mr">के-फोटो-अल्बम आयात</comment>
+ <comment xml:lang="nb">KPhotoAlbum-import</comment>
+ <comment xml:lang="nds">KPhotoAlbum-Import</comment>
+ <comment xml:lang="nl">KPhotoAlbum-import</comment>
+ <comment xml:lang="nn">KPhotoAlbum-import</comment>
+ <comment xml:lang="pa">KPhotoAlbum ਇੰਪੋਰਟ</comment>
+ <comment xml:lang="pl">Import KPhotoAlbum</comment>
+ <comment xml:lang="pt">Importação do KPhotoAlbum</comment>
+ <comment xml:lang="pt_BR">Importação do KPhotoAlbum</comment>
+ <comment xml:lang="ro">Import KPhotoAlbum</comment>
+ <comment xml:lang="ru">архив фотоальбома KPhotoAlbum</comment>
+ <comment xml:lang="se">KPhotoAlbum sisafievrrideapmi</comment>
+ <comment xml:lang="sk">Import KPhotoAlbum</comment>
+ <comment xml:lang="sl">Uvoz v KPhotoAlbum</comment>
+ <comment xml:lang="sq">KPhotoAlbum import</comment>
+ <comment xml:lang="sr">К‑фотоалбумов увоз</comment>
+ <comment xml:lang="sr@ijekavian">К‑фотоалбумов увоз</comment>
+ <comment xml:lang="sr@ijekavianlatin">KPhotoAlbumov uvoz</comment>
+ <comment xml:lang="sr@latin">KPhotoAlbumov uvoz</comment>
+ <comment xml:lang="sv">Kfotoalbum-import</comment>
+ <comment xml:lang="tr">KPhotoAlbum içeri aktarımı</comment>
+ <comment xml:lang="ug">KPhotoAlbum ئەكىر</comment>
+ <comment xml:lang="uk">імпортовані дані KPhotoAlbum</comment>
+ <comment xml:lang="zh_CN">KPhotoAlbum 导入</comment>
+ <comment xml:lang="zh_TW">KPhotoAlbum 匯入</comment>
+ <glob pattern="*.kim"/>
+ </mime-type>
+ <mime-type type="image/x-hdr"> <!-- TODO fdo report -->
+ <comment>HDR image</comment>
+ <comment xml:lang="ar">صورة HDR</comment>
+ <comment xml:lang="bg">Изображение HDR</comment>
+ <comment xml:lang="bs">HDR slika</comment>
+ <comment xml:lang="ca">Imatge HDR</comment>
+ <comment xml:lang="ca@valencia">Imatge HDR</comment>
+ <comment xml:lang="cs">HDR obrázek</comment>
+ <comment xml:lang="da">HDR-billede</comment>
+ <comment xml:lang="de">HDR-Bild</comment>
+ <comment xml:lang="el">Εικόνα HDR</comment>
+ <comment xml:lang="en_GB">HDR image</comment>
+ <comment xml:lang="es">Imagen HDR</comment>
+ <comment xml:lang="et">HDR pilt</comment>
+ <comment xml:lang="eu">HDR irudia</comment>
+ <comment xml:lang="fi">HDR-kuva</comment>
+ <comment xml:lang="fr">Image HDR</comment>
+ <comment xml:lang="ga">Íomhá HDR</comment>
+ <comment xml:lang="gd">dealbh HDR</comment>
+ <comment xml:lang="gl">Imaxe de HDR</comment>
+ <comment xml:lang="hr">HDR slika</comment>
+ <comment xml:lang="hu">HDR-kép</comment>
+ <comment xml:lang="ia">Imagine HDR</comment>
+ <comment xml:lang="id">Image HDR</comment>
+ <comment xml:lang="is">HDR mynd</comment>
+ <comment xml:lang="it">immagine HDR</comment>
+ <comment xml:lang="ja">HDR イメージ</comment>
+ <comment xml:lang="kk">HDR кескіні</comment>
+ <comment xml:lang="km">រូបភាព HDR</comment>
+ <comment xml:lang="ko">HDR 그림</comment>
+ <comment xml:lang="lt">HDR paveikslėlis</comment>
+ <comment xml:lang="lv">HDR attēls</comment>
+ <comment xml:lang="ml">എച്ച് ഡി ആര് ചിത്രം</comment>
+ <comment xml:lang="mr">HDR प्रतिमा</comment>
+ <comment xml:lang="ms">Imej HDR</comment>
+ <comment xml:lang="nb">HDR-bilde</comment>
+ <comment xml:lang="nds">HDR-Afbild</comment>
+ <comment xml:lang="nl">HDR-image</comment>
+ <comment xml:lang="nn">HDR-bilete</comment>
+ <comment xml:lang="pa">HDR ਚਿੱਤਰ</comment>
+ <comment xml:lang="pl">Obraz HDR</comment>
+ <comment xml:lang="pt">Imagem HDR</comment>
+ <comment xml:lang="pt_BR">Imagem HDR</comment>
+ <comment xml:lang="ro">Imagine HDR</comment>
+ <comment xml:lang="ru">изображение HDR</comment>
+ <comment xml:lang="se">HDR-govva</comment>
+ <comment xml:lang="sk">HDR obrázok</comment>
+ <comment xml:lang="sl">Slika HDR</comment>
+ <comment xml:lang="sq">HDR image</comment>
+ <comment xml:lang="sr">ХДР слика</comment>
+ <comment xml:lang="sr@ijekavian">ХДР слика</comment>
+ <comment xml:lang="sr@ijekavianlatin">HDR slika</comment>
+ <comment xml:lang="sr@latin">HDR slika</comment>
+ <comment xml:lang="sv">HDR-bild</comment>
+ <comment xml:lang="th">ภาพรูปแบบ HDR</comment>
+ <comment xml:lang="tr">HDR resmi</comment>
+ <comment xml:lang="ug">HDR سۈرەت</comment>
+ <comment xml:lang="uk">зображення HDR</comment>
+ <comment xml:lang="zh_CN">HDR 图像</comment>
+ <comment xml:lang="zh_TW">HDR 影像</comment>
+ <acronym>HDR</acronym>
+ <expanded-acronym>High Dynamic Range</expanded-acronym>
+ <glob pattern="*.hdr"/>
+ <glob pattern="*.pic"/>
+ </mime-type>
+ <mime-type type="image/x-kde-raw">
+ <sub-class-of type="image/x-dcraw"/>
+ <comment>KDE raw image formats</comment>
+ <comment xml:lang="ar">تنسيقات صور خام لكدي</comment>
+ <comment xml:lang="bs">KDE formati sirovih slika</comment>
+ <comment xml:lang="ca">Formats d'imatge RAW del KDE</comment>
+ <comment xml:lang="ca@valencia">Formats d'imatge RAW del KDE</comment>
+ <comment xml:lang="cs">Formáty obrázků raw v KDE</comment>
+ <comment xml:lang="da">KDE raw-billedformater</comment>
+ <comment xml:lang="de">KDE-Roh-Bildformate</comment>
+ <comment xml:lang="el">Τύποι ακατέργαστων μορφών εικόνας KDE </comment>
+ <comment xml:lang="en_GB">KDE raw image formats</comment>
+ <comment xml:lang="es">Formatos de imagen en bruto de KDE</comment>
+ <comment xml:lang="et">KDE toorpildivormingud</comment>
+ <comment xml:lang="eu">KDE raw irudi formatuak</comment>
+ <comment xml:lang="fi">KDE-raakakuvamuoto</comment>
+ <comment xml:lang="fr">Format d'image brute KDE</comment>
+ <comment xml:lang="ga">Formáidí amha íomhánna de chuid KDE</comment>
+ <comment xml:lang="gd">fòrmatan deilbh amh KDE</comment>
+ <comment xml:lang="gl">Formatos de imaxe raw de KDE</comment>
+ <comment xml:lang="hr">KDE-ovi sirovi slikovni podaci</comment>
+ <comment xml:lang="hu">KDE-s nyers képformátumok</comment>
+ <comment xml:lang="ia">Formatos de imagines crude de KDE</comment>
+ <comment xml:lang="id">Format image raw KDE</comment>
+ <comment xml:lang="is">KDE RAW myndsnið</comment>
+ <comment xml:lang="it">formati di immagine raw di KDE</comment>
+ <comment xml:lang="ja">KDE raw イメージ形式</comment>
+ <comment xml:lang="kk">KDE шікі кескін пішімі</comment>
+ <comment xml:lang="km">ទ្រង់ទ្រាយរូបភាពដើម KDE</comment>
+ <comment xml:lang="ko">KDE RAW 그림 형식</comment>
+ <comment xml:lang="lt">KDE gryni paveikslėlių formatai</comment>
+ <comment xml:lang="lv">KDE raw attēlu formāti</comment>
+ <comment xml:lang="ml">കെഡിഇ സംസ്കരിക്കാത്ത ചിത്ര ഘടന</comment>
+ <comment xml:lang="mr">केडीई रॉ इमेज फॉर्मेट</comment>
+ <comment xml:lang="nb">KDE råbildeformater</comment>
+ <comment xml:lang="nds">KDE-Rohbildformaten</comment>
+ <comment xml:lang="nl">KDE-rawimage-formats</comment>
+ <comment xml:lang="nn">KDE-råbilete</comment>
+ <comment xml:lang="pa">KDE ਰਾਅ ਚਿੱਤਰ ਫਾਰਮੈਟ</comment>
+ <comment xml:lang="pl">Formaty raw obrazów w KDE</comment>
+ <comment xml:lang="pt">Formatos de imagem em bruto do KDE</comment>
+ <comment xml:lang="pt_BR">Formatos de imagem RAW do KDE</comment>
+ <comment xml:lang="ro">Formate de imagine brute KDE</comment>
+ <comment xml:lang="ru">необработанное изображение</comment>
+ <comment xml:lang="sk">Formáty obrázkov raw v KDE</comment>
+ <comment xml:lang="sl">KDE-jeve surove vrste slik</comment>
+ <comment xml:lang="sr">КДЕ формати сирових слика</comment>
+ <comment xml:lang="sr@ijekavian">КДЕ формати сирових слика</comment>
+ <comment xml:lang="sr@ijekavianlatin">KDE formati sirovih slika</comment>
+ <comment xml:lang="sr@latin">KDE formati sirovih slika</comment>
+ <comment xml:lang="sv">KDE-obehandlade bildformat</comment>
+ <comment xml:lang="th">ภาพรูปแบบข้อมูลดิบของ KDE</comment>
+ <comment xml:lang="tr">KDE ham resim biçimleri</comment>
+ <comment xml:lang="ug">KDE raw سۈرەت پىچىمى</comment>
+ <comment xml:lang="uk">формати цифрових негативів KDE</comment>
+ <comment xml:lang="zh_CN">KDE 原始图像格式</comment>
+ <comment xml:lang="zh_TW">KDE 原始影像格式</comment>
+ <glob pattern="*.bay"/>
+ <glob pattern="*.bmq"/>
+ <glob pattern="*.cs1"/>
+ <glob pattern="*.cs2"/>
+ <glob pattern="*.erf"/>
+ <glob pattern="*.fff"/>
+ <glob pattern="*.hrd"/>
+ <glob pattern="*.mdc"/>
+ <glob pattern="*.mos"/>
+ <glob pattern="*.pnx"/>
+ <glob pattern="*.rdc"/>
+ </mime-type>
+ <mime-type type="text/plain"> <!-- As discussed on xdg list, *.doc is needed here for disambiguation -->
+ <glob pattern="*.doc"/>
+ </mime-type>
+ <mime-type type="text/x-hex">
+ <sub-class-of type="text/plain"/>
+ <comment>Intel® hexadecimal object file</comment>
+ <comment xml:lang="ar">ملف كائن سداسي عشر Intel®</comment>
+ <comment xml:lang="bs">Intelova heksadekadna objektna datoteka</comment>
+ <comment xml:lang="ca">Fitxer objecte hexadecimal d'Intel®</comment>
+ <comment xml:lang="ca@valencia">Fitxer objecte hexadecimal d'Intel®</comment>
+ <comment xml:lang="cs">Intel® hexadecimální objektový soubor</comment>
+ <comment xml:lang="da">Intel® hexadecimal objektfil</comment>
+ <comment xml:lang="de">Intel®-Hexadezimal-Objektdatei</comment>
+ <comment xml:lang="el">Δεκαεξαδικό μεταφρασμένο αρχείο Intel®</comment>
+ <comment xml:lang="en_GB">Intel® hexadecimal object file</comment>
+ <comment xml:lang="es">Archivo de código objeto hexadecimal de Intel®</comment>
+ <comment xml:lang="et">Intel® 16nd-objektfail</comment>
+ <comment xml:lang="eu">Intel® objektu hamaseitarra fitxategia</comment>
+ <comment xml:lang="fi">Intel®-heksadesimaaliobjektitiedosto</comment>
+ <comment xml:lang="fr">Fichier objet hexadécimal « Intel® »</comment>
+ <comment xml:lang="ga">Comhad oibiachta heicsidheachúlach Intel®</comment>
+ <comment xml:lang="gd">faidhle oibseact sia-dheicheach Intel®</comment>
+ <comment xml:lang="gl">Ficheiro de obxecto hexadecimal de Intel®</comment>
+ <comment xml:lang="hr">Intelova® heksadecimalna objektna datoteka</comment>
+ <comment xml:lang="hu">Intel®-féle hexadecimális objektumfájl</comment>
+ <comment xml:lang="ia">File objecto hexadecimal de Intel(c)</comment>
+ <comment xml:lang="id">File objek heksadesimal Intel®</comment>
+ <comment xml:lang="is">Intel® hexadesimal hlutaskrá</comment>
+ <comment xml:lang="it">file oggetto esadecimale Intel®</comment>
+ <comment xml:lang="ja">Intel® 十六進オブジェクトファイル</comment>
+ <comment xml:lang="kk">Intel® оналтылықты объектік файл</comment>
+ <comment xml:lang="km">ឯកសារវត្ថុគោលដប់ប្រាំមួយរបស់ Intel®</comment>
+ <comment xml:lang="ko">Intel® 16진수 개체 파일</comment>
+ <comment xml:lang="lt">Intel® šešioliktainio objekto failas</comment>
+ <comment xml:lang="lv">Intel® hexadecimālais objekta fails</comment>
+ <comment xml:lang="ml">ഇന്റെല്® ഹെക്സാഡെസിമല് ഒബ്ജക്റ്റ് ഫയല്</comment>
+ <comment xml:lang="mr">Intel® हेक्झाडेसिमल ऑब्जेक्ट फाईल</comment>
+ <comment xml:lang="ms">Fail objek heksadesimal Intel(R)</comment>
+ <comment xml:lang="nb">Intel® heksadesimal objektfil</comment>
+ <comment xml:lang="nds">"Intel® hexadezimaal"-Objektdatei</comment>
+ <comment xml:lang="nl">Intel® hexadecimaal objectbestand</comment>
+ <comment xml:lang="nn">Intel®-heksobjektfil</comment>
+ <comment xml:lang="pa">Intel® ਹੈਕਸਾਡੈਸੀਮਲ ਆਬਜੈਕਟ ਫਾਈਲ</comment>
+ <comment xml:lang="pl">Plik obiektu szesnastkowego: Intel®</comment>
+ <comment xml:lang="pt">Ficheiro-objecto em hexadecimal da Intel®</comment>
+ <comment xml:lang="pt_BR">Arquivo objeto em hexadecimal da Intel®</comment>
+ <comment xml:lang="ro">fișier obiect hexazecimal Intel®</comment>
+ <comment xml:lang="ru">файл Intel HEX</comment>
+ <comment xml:lang="se">Intel® heaksadesimála objeaktafiila</comment>
+ <comment xml:lang="sk">Intel® hexadecimálny objektový súbor</comment>
+ <comment xml:lang="sl">Intelova šestnajstiška predmetna datoteka</comment>
+ <comment xml:lang="sq">Intel® hexadecimal object file</comment>
+ <comment xml:lang="sr">Интелов хексадекадни објектни фајл</comment>
+ <comment xml:lang="sr@ijekavian">Интелов хексадекадни објектни фајл</comment>
+ <comment xml:lang="sr@ijekavianlatin">Intelov heksadekadni objektni fajl</comment>
+ <comment xml:lang="sr@latin">Intelov heksadekadni objektni fajl</comment>
+ <comment xml:lang="sv">Intel® hexadecimal objektfil</comment>
+ <comment xml:lang="th">แฟ้มออบเจ็กต์ฐานสิบหกของ Intel®</comment>
+ <comment xml:lang="tr">Intel® onaltılık nesne dosyası</comment>
+ <comment xml:lang="ug">Intel® ئون ئالتىلىك نەڭ ھۆججىتى</comment>
+ <comment xml:lang="uk">шістнадцятковий об’єктний файл Intel®</comment>
+ <comment xml:lang="zh_CN">Intel® 十六进制对象文件</comment>
+ <comment xml:lang="zh_TW">Intel® hexadecimal 物件檔</comment>
+ <glob pattern="*.hex"/>
+ </mime-type>
+ <mime-type type="text/x-katefilelist">
+ <sub-class-of type="text/plain"/>
+ <comment>Kate file list loader plugin list</comment>
+ <comment xml:lang="ar">قائمة ملحقات محملات قائمة ملفات لكيت</comment>
+ <comment xml:lang="bs">spisak Kateinog priključka za učitavanje datoteka</comment>
+ <comment xml:lang="ca">Llista del connector carregador de llista de fitxers del Kate</comment>
+ <comment xml:lang="ca@valencia">Llista del connector carregador de llista de fitxers del Kate</comment>
+ <comment xml:lang="da">Liste over plugins til fillisteindlæsning i Kate</comment>
+ <comment xml:lang="de">Kate-Dateilisten-Modul</comment>
+ <comment xml:lang="el">Λίστα αρχείου φόρτωσης λίστας πρόσθετων Kate</comment>
+ <comment xml:lang="en_GB">Kate file list loader plugin list</comment>
+ <comment xml:lang="es">Lista de complementos de carga de listas de archivos de Kate</comment>
+ <comment xml:lang="et">Kate failinimekirja avaja plugin</comment>
+ <comment xml:lang="eu">Kate fitxategi-zerrenda kargatzeko plugin zerrenda</comment>
+ <comment xml:lang="fi">Kate-tiedostoluettelolataajaliitännäisluettelo</comment>
+ <comment xml:lang="fr">Liste de modules externes pour le chargeur de liste de fichiers de Kate</comment>
+ <comment xml:lang="ga">Liosta de bhreiseáin luchtaithe liostaí comhad do Kate</comment>
+ <comment xml:lang="gd">liosta de phlugan Kate a luchdaicheas liostaichean fhaidhlichean</comment>
+ <comment xml:lang="gl">Lista de complementos do cargador de lista de ficheiros de Kate</comment>
+ <comment xml:lang="hr">Kate lista od priključka učitavača liste datoteka</comment>
+ <comment xml:lang="hu">Kate-listafájl (fájllista vagy bővítménylista)</comment>
+ <comment xml:lang="ia">Kate: Lista de plugin de cargator de lista de file</comment>
+ <comment xml:lang="id">Daftar file Kate pemuat daftar plugin</comment>
+ <comment xml:lang="is">Kate skráahleðsluíforritalisti</comment>
+ <comment xml:lang="it">elenco delle estensioni del caricatore di elenchi di file di Kate</comment>
+ <comment xml:lang="ja">Kate ファイルリストローダプラグインリスト</comment>
+ <comment xml:lang="kk">Kate файлдар тізімін жүктеу плагин тізімі</comment>
+ <comment xml:lang="km">បញ្ជីកម្មវិធីជំនួយរបស់កម្មវិធីផ្ទុកបញ្ជីឯកសាររបស់ Kate</comment>
+ <comment xml:lang="ko">Kate 파일 목록 로더 플러그인 목록</comment>
+ <comment xml:lang="lt">Kate failų sąrašo užkrovimo papildinių sąrašas</comment>
+ <comment xml:lang="lv">Kate failu saraksta ielādētāja spraudņa saraksts</comment>
+ <comment xml:lang="ml">കേറ്റ് ഫയല് പട്ടിക ലഭ്യമാക്കുന്നതിന്റെ സംയോജകങ്ങളുടെ പട്ടിക</comment>
+ <comment xml:lang="mr">केट फाईल यादी लोड करणाऱ्या प्लगइनची यादी</comment>
+ <comment xml:lang="nb">Liste over programtillegg for Kate fillistelasting</comment>
+ <comment xml:lang="nds">Dateilistlader-Moduullist för Kate</comment>
+ <comment xml:lang="nl">Kate bestandenlijstlader voor pluginlijst</comment>
+ <comment xml:lang="nn">Programtilleggliste for fillistelastar i Kate</comment>
+ <comment xml:lang="pa">ਕੇਟ ਫਾਈਲ ਲਿਸਟ ਲੋਡਰ ਪਲੱਗਇਨ ਲਿਸਟ</comment>
+ <comment xml:lang="pl">Lista wtyczki do wczytywania plików Kate</comment>
+ <comment xml:lang="pt">Lista de 'plugins' de carregamento de listas de ficheiros do Kate</comment>
+ <comment xml:lang="pt_BR">Lista de plugins de carregamento de listas de arquivos do Kate</comment>
+ <comment xml:lang="ro">listă de module pentru încărcarea liste de fișiere în Kate</comment>
+ <comment xml:lang="ru">список файлов Kate</comment>
+ <comment xml:lang="se">Kate-fiilalistoviežži lassemodulalistu</comment>
+ <comment xml:lang="sk">Zoznam modulov - načítanie zoznamu súborov Kate</comment>
+ <comment xml:lang="sl">Seznam vstavka nalagalnika seznamov datotek za Kate</comment>
+ <comment xml:lang="sr">списак Кејтиног прикључка за учитавање фајлова</comment>
+ <comment xml:lang="sr@ijekavian">списак Кејтиног прикључка за учитавање фајлова</comment>
+ <comment xml:lang="sr@ijekavianlatin">spisak Kateinog priključka za učitavanje fajlova</comment>
+ <comment xml:lang="sr@latin">spisak Kateinog priključka za učitavanje fajlova</comment>
+ <comment xml:lang="sv">Kate insticksprogramlista för laddning av fillistor</comment>
+ <comment xml:lang="tr">Kate dosya listesi yükleyici eklentisi listesi</comment>
+ <comment xml:lang="ug">Kate ھۆججەت تىزىمى يۈكلىگۈچ قىستۇرما تىزىمى</comment>
+ <comment xml:lang="uk">список файлів Kate</comment>
+ <comment xml:lang="zh_CN">Kate 文件列表装入器插件列表</comment>
+ <comment xml:lang="zh_TW">Kate 檔案清單載入器外掛程式清單</comment>
+ <glob pattern="*.katefl"/>
+ </mime-type>
+ <mime-type type="text/vnd.abc"> <!-- fdo #6578, needs update -->
+ <sub-class-of type="text/plain"/>
+ <comment>abc musical notation file</comment>
+ <comment xml:lang="ar">ملف كراسة موسيقية abc</comment>
+ <comment xml:lang="bs">muzička notacija ABC</comment>
+ <comment xml:lang="ca">Fitxer de notació musical abc</comment>
+ <comment xml:lang="ca@valencia">Fitxer de notació musical abc</comment>
+ <comment xml:lang="cs">Soubor hudební notace abc</comment>
+ <comment xml:lang="da">abc musiknode-fil</comment>
+ <comment xml:lang="de">abc-Musik-Notationsdatei</comment>
+ <comment xml:lang="el">Αρχείο μουσικών συμβόλων abc</comment>
+ <comment xml:lang="en_GB">abc musical notation file</comment>
+ <comment xml:lang="es">Archivo de notación musical abc</comment>
+ <comment xml:lang="et">abc notatsioonifail</comment>
+ <comment xml:lang="eu">abc musika fitxategia</comment>
+ <comment xml:lang="fi">abc-musiikkinuottikirjoitustiedosto</comment>
+ <comment xml:lang="fr">Fichier de notation musicale « ABC »</comment>
+ <comment xml:lang="ga">Comhad nodaireachta ceoil abc</comment>
+ <comment xml:lang="gd">faidhle nòtachadh ciùil abc</comment>
+ <comment xml:lang="gl">ficheiro de notación musical abc</comment>
+ <comment xml:lang="hr">abc muzičko notacijska datoteka</comment>
+ <comment xml:lang="hu">Abc-kottafájl</comment>
+ <comment xml:lang="ia">file de notation musical abc</comment>
+ <comment xml:lang="id">File notasi musikal abc</comment>
+ <comment xml:lang="is">abc nótnaskriftarskrá</comment>
+ <comment xml:lang="it">file di notazione musicale abc</comment>
+ <comment xml:lang="ja">abc ミュージカルノーテーションファイル</comment>
+ <comment xml:lang="kk">abc музыка ноталар файлы</comment>
+ <comment xml:lang="km">ឯកសារជូនដំណឹងតន្ត្រី abc</comment>
+ <comment xml:lang="ko">abc 악보 파일</comment>
+ <comment xml:lang="lt">abc muzikos natų failas</comment>
+ <comment xml:lang="lv">abc mūzikas notācijas fails</comment>
+ <comment xml:lang="ml">എബിസി സംഗീത ചിഹ്ന ഫയല്</comment>
+ <comment xml:lang="mr">abc संगीत नोटेशन फाईल</comment>
+ <comment xml:lang="nb">abc musikknotefil</comment>
+ <comment xml:lang="nds">abc-Musikschrift-Datei</comment>
+ <comment xml:lang="nl">abc-muzieknotatiebestand</comment>
+ <comment xml:lang="nn">abc-musikknotasjonsfil</comment>
+ <comment xml:lang="pl">plik notacji muzycznej abc</comment>
+ <comment xml:lang="pt">Ficheiro de notação musical do 'abc'</comment>
+ <comment xml:lang="pt_BR">arquivo de notação musical do abc</comment>
+ <comment xml:lang="ro">Fișier de notație muzicală abc</comment>
+ <comment xml:lang="ru">нотная запись ABC</comment>
+ <comment xml:lang="se">abc-musihkkačállinprográmma</comment>
+ <comment xml:lang="sk">Súbor hudobnej notácie abc</comment>
+ <comment xml:lang="sl">Datoteka glasbenega zapisa abc</comment>
+ <comment xml:lang="sr">музичка нотација АБЦ</comment>
+ <comment xml:lang="sr@ijekavian">музичка нотација АБЦ</comment>
+ <comment xml:lang="sr@ijekavianlatin">muzička notacija ABC</comment>
+ <comment xml:lang="sr@latin">muzička notacija ABC</comment>
+ <comment xml:lang="sv">abc-musiknotationsfil</comment>
+ <comment xml:lang="tr">abc müzik notalama dosyası</comment>
+ <comment xml:lang="ug">abc مۇزىكا بەلگە ھۆججىتى</comment>
+ <comment xml:lang="uk">файл нотного стану abc</comment>
+ <comment xml:lang="zh_CN">abc 音乐符号文件</comment>
+ <comment xml:lang="zh_TW">abc 音樂通知檔</comment>
+ <magic priority="80">
+ <match type="string" value="%abc" offset="0"/>
+ </magic>
+ <glob pattern="*.abc"/>
+ </mime-type>
+
+ <mime-type type="application/vnd.kde.fontspackage">
+ <sub-class-of type="application/zip"/>
+ <comment>fonts package</comment>
+ <comment xml:lang="ar">حزمة خطوط</comment>
+ <comment xml:lang="bs">paket fontova</comment>
+ <comment xml:lang="ca">Paquet de tipus de lletres</comment>
+ <comment xml:lang="ca@valencia">Paquet de tipus de lletres</comment>
+ <comment xml:lang="cs">balíček písem</comment>
+ <comment xml:lang="da">skrifttypepakke</comment>
+ <comment xml:lang="de">Schriftartenpaket</comment>
+ <comment xml:lang="el">Πακέτο γραμματοσειρών</comment>
+ <comment xml:lang="en_GB">fonts package</comment>
+ <comment xml:lang="es">paquete de tipos de letra</comment>
+ <comment xml:lang="et">fondipakett</comment>
+ <comment xml:lang="eu">letra-tipoen paketea</comment>
+ <comment xml:lang="fi">fonttipaketti</comment>
+ <comment xml:lang="fr">Paquet de polices</comment>
+ <comment xml:lang="ga">pacáiste clónna</comment>
+ <comment xml:lang="gd">pacaid chruthan-clò</comment>
+ <comment xml:lang="gl">paquete de tipos de letra</comment>
+ <comment xml:lang="hr">paket pisama</comment>
+ <comment xml:lang="hu">betűtípuscsomag</comment>
+ <comment xml:lang="ia">pacchettos de fonts</comment>
+ <comment xml:lang="id">Paket fon</comment>
+ <comment xml:lang="is">leturpakki</comment>
+ <comment xml:lang="it">pacchetto di caratteri</comment>
+ <comment xml:lang="ja">フォントパッケージ</comment>
+ <comment xml:lang="kk">қаріптер дестесі</comment>
+ <comment xml:lang="km">កញ្ចប់ពុម្ពអក្សរ</comment>
+ <comment xml:lang="ko">글꼴 패키지</comment>
+ <comment xml:lang="lt">šriftų paketas</comment>
+ <comment xml:lang="lv">fontu pakotne</comment>
+ <comment xml:lang="ml">അക്ഷരസഞ്ചയ പാക്കേജ് </comment>
+ <comment xml:lang="mr">फॉन्ट पॅकेज</comment>
+ <comment xml:lang="nb">skriftpakke</comment>
+ <comment xml:lang="nds">Schriftoorden-Paket</comment>
+ <comment xml:lang="nl">lettertypenpakket</comment>
+ <comment xml:lang="nn">skriftpakke</comment>
+ <comment xml:lang="pa">ਫੋਂਟ ਪੈਕੇਜ</comment>
+ <comment xml:lang="pl">pakiet czcionek</comment>
+ <comment xml:lang="pt">pacote de tipos de letra</comment>
+ <comment xml:lang="pt_BR">pacote de fontes</comment>
+ <comment xml:lang="ro">pachet de fonturi</comment>
+ <comment xml:lang="ru">пакет шрифтов</comment>
+ <comment xml:lang="se">fontapáhkka</comment>
+ <comment xml:lang="sk">balíček písiem</comment>
+ <comment xml:lang="sl">paket pisav</comment>
+ <comment xml:lang="sr">пакет фонтова</comment>
+ <comment xml:lang="sr@ijekavian">пакет фонтова</comment>
+ <comment xml:lang="sr@ijekavianlatin">paket fontova</comment>
+ <comment xml:lang="sr@latin">paket fontova</comment>
+ <comment xml:lang="sv">teckensnittspaket</comment>
+ <comment xml:lang="th">แพกเกจชุดแบบอักษร</comment>
+ <comment xml:lang="tr">yazı tipi paketi</comment>
+ <comment xml:lang="ug">خەت نۇسخا بوغچىسى</comment>
+ <comment xml:lang="uk">пакунок шрифтів</comment>
+ <comment xml:lang="zh_CN">字体包</comment>
+ <comment xml:lang="zh_TW">字型套件</comment>
+ <glob pattern="*.fonts.zip"/>
+ </mime-type>
+
+ <mime-type type="application/x-smb-server"> <!-- KDE-specific -->
+ <sub-class-of type="inode/directory"/>
+ <comment>Windows server</comment>
+ <comment xml:lang="ar">خادم ويندوز</comment>
+ <comment xml:lang="bs">windows server</comment>
+ <comment xml:lang="ca">Servidor Windows</comment>
+ <comment xml:lang="ca@valencia">Servidor Windows</comment>
+ <comment xml:lang="cs">Windows server</comment>
+ <comment xml:lang="da">Windows-server</comment>
+ <comment xml:lang="de">Windows-Server</comment>
+ <comment xml:lang="el">Εξυπηρετητής Windows</comment>
+ <comment xml:lang="en_GB">Windows server</comment>
+ <comment xml:lang="es">Servidor de Windows</comment>
+ <comment xml:lang="et">Windowsi server</comment>
+ <comment xml:lang="eu">Windows zerbitzaria</comment>
+ <comment xml:lang="fi">Windows-palvelin</comment>
+ <comment xml:lang="fr">Serveur Windows</comment>
+ <comment xml:lang="ga">Freastalaí Windows</comment>
+ <comment xml:lang="gd">frithealaiche Windows</comment>
+ <comment xml:lang="gl">Servidor de Windows</comment>
+ <comment xml:lang="hr">Windows poslužitelj</comment>
+ <comment xml:lang="hu">Windows-kiszolgáló</comment>
+ <comment xml:lang="ia">Servitor de Windows</comment>
+ <comment xml:lang="id">Server Windows</comment>
+ <comment xml:lang="is">Windows miðlari</comment>
+ <comment xml:lang="it">server Windows</comment>
+ <comment xml:lang="ja">Windows サーバ</comment>
+ <comment xml:lang="kk">Windows сервері</comment>
+ <comment xml:lang="km">ម៉ាស៊ីនបម្រើវីនដូ</comment>
+ <comment xml:lang="ko">Windows 서버</comment>
+ <comment xml:lang="lt">Windows serveris</comment>
+ <comment xml:lang="lv">Windows serveris</comment>
+ <comment xml:lang="ml">വിന്ഡോസ് സേവകന്</comment>
+ <comment xml:lang="mr">विंडोज सर्व्हर</comment>
+ <comment xml:lang="nb">Windows-tjener</comment>
+ <comment xml:lang="nds">Windows-Server</comment>
+ <comment xml:lang="nl">Windows-server</comment>
+ <comment xml:lang="nn">Windows-tenar</comment>
+ <comment xml:lang="pa">ਵਿੰਡੋਜ਼ ਸਰਵਰ</comment>
+ <comment xml:lang="pl">Serwer Windows</comment>
+ <comment xml:lang="pt">Servidor do Windows</comment>
+ <comment xml:lang="pt_BR">Servidor do Windows</comment>
+ <comment xml:lang="ro">Server Windows</comment>
+ <comment xml:lang="ru">сервер Windows</comment>
+ <comment xml:lang="se">Windowsbálvá</comment>
+ <comment xml:lang="sk">Server Windows</comment>
+ <comment xml:lang="sl">Strežnik Windows</comment>
+ <comment xml:lang="sq">Windows server</comment>
+ <comment xml:lang="sr">виндоуз сервер</comment>
+ <comment xml:lang="sr@ijekavian">виндоуз сервер</comment>
+ <comment xml:lang="sr@ijekavianlatin">windows server</comment>
+ <comment xml:lang="sr@latin">windows server</comment>
+ <comment xml:lang="sv">Windows-server</comment>
+ <comment xml:lang="th">เครื่องแม่ข่ายวินโดวส์</comment>
+ <comment xml:lang="tr">Windows sunucusu</comment>
+ <comment xml:lang="ug">Windows مۇلازىمېتىر</comment>
+ <comment xml:lang="uk">сервер Windows</comment>
+ <comment xml:lang="zh_CN">Windows 服务器</comment>
+ <comment xml:lang="zh_TW">Windows 伺服器</comment>
+ </mime-type>
+ <mime-type type="application/x-smb-workgroup"> <!-- KDE-specific -->
+ <sub-class-of type="inode/directory"/>
+ <comment>Windows workgroup</comment>
+ <comment xml:lang="ar">مجموعة عمل ويندوز</comment>
+ <comment xml:lang="bs">windows radna grupa</comment>
+ <comment xml:lang="ca">Treball en grup de Windows</comment>
+ <comment xml:lang="ca@valencia">Treball en grup de Windows</comment>
+ <comment xml:lang="cs">Pracovní skupina Windows</comment>
+ <comment xml:lang="da">Windows-arbejdsgruppe</comment>
+ <comment xml:lang="de">Windows-Arbeitsgruppe</comment>
+ <comment xml:lang="el">Ομάδα εργασίας Windows</comment>
+ <comment xml:lang="en_GB">Windows workgroup</comment>
+ <comment xml:lang="es">Grupo de trabajo de Windows</comment>
+ <comment xml:lang="et">Windowsi töögrupp</comment>
+ <comment xml:lang="eu">Windows lantaldea</comment>
+ <comment xml:lang="fi">Windows-työryhmä</comment>
+ <comment xml:lang="fr">Groupe de travail Windows</comment>
+ <comment xml:lang="ga">Grúpa oibre Windows</comment>
+ <comment xml:lang="gd">buidheann-obrach Windows</comment>
+ <comment xml:lang="gl">Grupo de traballo de Windows</comment>
+ <comment xml:lang="hr">Windows radna grupa</comment>
+ <comment xml:lang="hu">Windows munkacsoport</comment>
+ <comment xml:lang="ia">Gruppo de travalio de Windows</comment>
+ <comment xml:lang="id">Workgroup Windows</comment>
+ <comment xml:lang="is">Windows vinnuhópur</comment>
+ <comment xml:lang="it">gruppo di lavoro di Windows</comment>
+ <comment xml:lang="ja">Windows ワークグループ</comment>
+ <comment xml:lang="kk">Windows жұмыс тобы</comment>
+ <comment xml:lang="km">ក្រុមការងាររបស់វីនដូ</comment>
+ <comment xml:lang="ko">Windows 작업 그룹</comment>
+ <comment xml:lang="lt">Windows darbo grupė</comment>
+ <comment xml:lang="lv">Windows darbagrupa</comment>
+ <comment xml:lang="ml">വിന്ഡോസ് പണി-കൂട്ടം</comment>
+ <comment xml:lang="mr">विंडोज वर्कग्रूप</comment>
+ <comment xml:lang="nb">Windows workgroup</comment>
+ <comment xml:lang="nds">Windows-Arbeitkoppel</comment>
+ <comment xml:lang="nl">Windows-werkgroep</comment>
+ <comment xml:lang="nn">Windows-arbeidsgruppe</comment>
+ <comment xml:lang="pa">ਵਿੰਡੋਜ਼ ਵਰਕਗਰੁੱਪ</comment>
+ <comment xml:lang="pl">Grupa robocza Windows</comment>
+ <comment xml:lang="pt">Grupo de trabalho do Windows</comment>
+ <comment xml:lang="pt_BR">Grupo de trabalho do Windows</comment>
+ <comment xml:lang="ro">Grup de lucru Windows</comment>
+ <comment xml:lang="ru">рабочая группа Windows</comment>
+ <comment xml:lang="se">Windowsbargojoavku</comment>
+ <comment xml:lang="sk">Pracovná skupina Windows</comment>
+ <comment xml:lang="sl">Delovna skupina Windows</comment>
+ <comment xml:lang="sq">Windows workgroup</comment>
+ <comment xml:lang="sr">виндоуз радна група</comment>
+ <comment xml:lang="sr@ijekavian">виндоуз радна група</comment>
+ <comment xml:lang="sr@ijekavianlatin">windows radna grupa</comment>
+ <comment xml:lang="sr@latin">windows radna grupa</comment>
+ <comment xml:lang="sv">Windows-arbetsgrupp</comment>
+ <comment xml:lang="th">กลุ่มงานของวินโดวส์</comment>
+ <comment xml:lang="tr">Windows çalışma grubu</comment>
+ <comment xml:lang="ug">Windows خىزمەت گۇرۇپپىسى</comment>
+ <comment xml:lang="uk">робоча група Windows</comment>
+ <comment xml:lang="zh_CN">Windows 工作组</comment>
+ <comment xml:lang="zh_TW">Windows 工作群組</comment>
+ </mime-type>
+ <mime-type type="application/x-ksysguard">
+ <!-- <sub-class-of type="application/xml"/> -->
+ <comment>KDE system monitor</comment>
+ <comment xml:lang="ar">نظام مراقبة كدي</comment>
+ <comment xml:lang="bg">Системен монитор за KDE</comment>
+ <comment xml:lang="bs">KDE sistemski monitor</comment>
+ <comment xml:lang="ca">Controlador del sistema del KDE</comment>
+ <comment xml:lang="ca@valencia">Controlador del sistema del KDE</comment>
+ <comment xml:lang="cs">Monitor systému pro KDE</comment>
+ <comment xml:lang="da">KDE systemovervågning</comment>
+ <comment xml:lang="de">KDE-Systemüberwachung</comment>
+ <comment xml:lang="el">Επόπτης συστήματος του KDE</comment>
+ <comment xml:lang="en_GB">KDE system monitor</comment>
+ <comment xml:lang="es">Monitor del sistema de KDE</comment>
+ <comment xml:lang="et">KDE süsteemi jälgija</comment>
+ <comment xml:lang="eu">KDE sistema monitorea</comment>
+ <comment xml:lang="fi">KDE:n järjestelmänvalvonta</comment>
+ <comment xml:lang="fr">Moniteur système KDE</comment>
+ <comment xml:lang="ga">Monatóir an chórais KDE</comment>
+ <comment xml:lang="gd">monatair siostaim KDE</comment>
+ <comment xml:lang="gl">Vixiante do sistema de KDE</comment>
+ <comment xml:lang="hr">KDE-ov monitor sustava</comment>
+ <comment xml:lang="hu">KDE rendszermonitor</comment>
+ <comment xml:lang="ia">Monitor de Systema de KDE</comment>
+ <comment xml:lang="id">Pemantau Sistem KDE</comment>
+ <comment xml:lang="is">KDE kerfiseftirlit</comment>
+ <comment xml:lang="it">monitor di sistema di KDE</comment>
+ <comment xml:lang="ja">KDE システムモニタ</comment>
+ <comment xml:lang="kk">KDE жүйе мониторы</comment>
+ <comment xml:lang="km">កម្មវិធីត្រួតពិនិត្យប្រព័ន្ធរបស់ KDE</comment>
+ <comment xml:lang="ko">KDE 시스템 모니터</comment>
+ <comment xml:lang="lt">KDE sistemos stebėtojas</comment>
+ <comment xml:lang="lv">KDE sistēmas novērotājs</comment>
+ <comment xml:lang="ml">കെഡിഇ സിസ്റ്റം നിരിക്ഷകന്</comment>
+ <comment xml:lang="mr">केडीई प्रणाली मॉनिटर</comment>
+ <comment xml:lang="nb">KDE systemvakt</comment>
+ <comment xml:lang="nds">KDE-Systeemwachter</comment>
+ <comment xml:lang="nl">KDE systeembewaking</comment>
+ <comment xml:lang="nn">KDE-systemovervaking</comment>
+ <comment xml:lang="pa">KDE ਸਿਸਟਮ ਮਾਨੀਟਰ</comment>
+ <comment xml:lang="pl">Monitor systemowy KDE</comment>
+ <comment xml:lang="pt">Monitor do sistema KDE</comment>
+ <comment xml:lang="pt_BR">Monitor do sistema do KDE</comment>
+ <comment xml:lang="ro">Monitor sistem KDE</comment>
+ <comment xml:lang="ru">системный монитор KDE</comment>
+ <comment xml:lang="se">KDE vuogádatgoziheaddji</comment>
+ <comment xml:lang="sk">Monitor systému pre KDE</comment>
+ <comment xml:lang="sl">Sistemski nadzornik KDE</comment>
+ <comment xml:lang="sr">КДЕ системски монитор</comment>
+ <comment xml:lang="sr@ijekavian">КДЕ системски монитор</comment>
+ <comment xml:lang="sr@ijekavianlatin">KDE sistemski monitor</comment>
+ <comment xml:lang="sr@latin">KDE sistemski monitor</comment>
+ <comment xml:lang="sv">KDE-systemövervakare</comment>
+ <comment xml:lang="th">เครื่องมือติดตามการทำงานของระบบของ KDE</comment>
+ <comment xml:lang="tr">KDE sistem izleyici</comment>
+ <comment xml:lang="ug">KDE سىستېما كۆزەتكۈچ</comment>
+ <comment xml:lang="uk">нагляд за системою KDE</comment>
+ <comment xml:lang="zh_CN">KDE 系统监视器</comment>
+ <comment xml:lang="zh_TW">KDE 系統監視器</comment>
+ <glob pattern="*.sgrd"/>
+ </mime-type>
+ <mime-type type="application/x-ktheme">
+ <sub-class-of type="application/zip"/>
+ <comment>KDE theme</comment>
+ <comment xml:lang="ar">سمة كدي</comment>
+ <comment xml:lang="bg">Тема за KDE</comment>
+ <comment xml:lang="bs">KDE tema</comment>
+ <comment xml:lang="ca">Tema del KDE</comment>
+ <comment xml:lang="ca@valencia">Tema del KDE</comment>
+ <comment xml:lang="cs">Motiv KDE</comment>
+ <comment xml:lang="da">KDE-tema</comment>
+ <comment xml:lang="de">KDE-Design</comment>
+ <comment xml:lang="el">Θέμα του KDE</comment>
+ <comment xml:lang="en_GB">KDE theme</comment>
+ <comment xml:lang="es">Tema de KDE</comment>
+ <comment xml:lang="et">KDE teema</comment>
+ <comment xml:lang="eu">KDE tema</comment>
+ <comment xml:lang="fi">KDE-teema</comment>
+ <comment xml:lang="fr">Thème KDE</comment>
+ <comment xml:lang="ga">Téama KDE</comment>
+ <comment xml:lang="gd">ùrlar KDE</comment>
+ <comment xml:lang="gl">Tema de KDE</comment>
+ <comment xml:lang="hr">KDE-ova tema</comment>
+ <comment xml:lang="hu">KDE-téma</comment>
+ <comment xml:lang="ia">Thema de KDE</comment>
+ <comment xml:lang="id">Tema KDE</comment>
+ <comment xml:lang="is">KDE þema</comment>
+ <comment xml:lang="it">tema di KDE</comment>
+ <comment xml:lang="ja">KDE テーマ</comment>
+ <comment xml:lang="kk">KDE нақышы</comment>
+ <comment xml:lang="km">ស្បែករបស់ KDE</comment>
+ <comment xml:lang="ko">KDE 테마</comment>
+ <comment xml:lang="lt">KDE tema</comment>
+ <comment xml:lang="lv">KDE tēma</comment>
+ <comment xml:lang="ml">കെഡിഇ പ്രമേയം</comment>
+ <comment xml:lang="mr">केडीई शैली</comment>
+ <comment xml:lang="nb">KDE-tema</comment>
+ <comment xml:lang="nds">KDE-Muster</comment>
+ <comment xml:lang="nl">KDE-thema</comment>
+ <comment xml:lang="nn">KDE-tema</comment>
+ <comment xml:lang="pa">KDE ਥੀਮ</comment>
+ <comment xml:lang="pl">Motyw KDE</comment>
+ <comment xml:lang="pt">Tema do KDE</comment>
+ <comment xml:lang="pt_BR">Tema do KDE</comment>
+ <comment xml:lang="ro">Tematică KDE</comment>
+ <comment xml:lang="ru">оформление KDE</comment>
+ <comment xml:lang="se">KDE fáddá</comment>
+ <comment xml:lang="sk">Téma KDE</comment>
+ <comment xml:lang="sl">Tema KDE</comment>
+ <comment xml:lang="sr">КДЕ тема</comment>
+ <comment xml:lang="sr@ijekavian">КДЕ тема</comment>
+ <comment xml:lang="sr@ijekavianlatin">KDE tema</comment>
+ <comment xml:lang="sr@latin">KDE tema</comment>
+ <comment xml:lang="sv">KDE-tema</comment>
+ <comment xml:lang="th">ชุดตกแต่ง KDE</comment>
+ <comment xml:lang="tr">KDE teması</comment>
+ <comment xml:lang="ug">KDE ئۆرنىكى</comment>
+ <comment xml:lang="uk">тема KDE</comment>
+ <comment xml:lang="zh_CN">KDE 主题</comment>
+ <comment xml:lang="zh_TW">KDE 主題</comment>
+ <glob pattern="*.kth"/>
+ </mime-type>
+
+ <mime-type type="application/x-quanta">
+ <sub-class-of type="text/plain"/>
+ <comment>Quanta project</comment>
+ <comment xml:lang="ar">مشروع Quanta</comment>
+ <comment xml:lang="bg">Проект на Quanta</comment>
+ <comment xml:lang="bs">Quantin projekat</comment>
+ <comment xml:lang="ca">Projecte del Quanta</comment>
+ <comment xml:lang="ca@valencia">Projecte del Quanta</comment>
+ <comment xml:lang="cs">Projekt Quanta</comment>
+ <comment xml:lang="da">Quanta-projekt</comment>
+ <comment xml:lang="de">Quanta-Projekt</comment>
+ <comment xml:lang="el">Έργο Quanta</comment>
+ <comment xml:lang="en_GB">Quanta project</comment>
+ <comment xml:lang="es">Proyecto de Quanta</comment>
+ <comment xml:lang="et">Quanta projekt</comment>
+ <comment xml:lang="eu">Quanta proiektua</comment>
+ <comment xml:lang="fi">Quanta-projekti</comment>
+ <comment xml:lang="fr">Projet Quanta</comment>
+ <comment xml:lang="ga">Tionscadal Quanta</comment>
+ <comment xml:lang="gd">pròiseact Quanta</comment>
+ <comment xml:lang="gl">Proxecto de Quanta</comment>
+ <comment xml:lang="hr">Quanta projekt</comment>
+ <comment xml:lang="hu">Quanta-projekt</comment>
+ <comment xml:lang="ia">Quanta : Projecto</comment>
+ <comment xml:lang="id">Proyek Quanta</comment>
+ <comment xml:lang="is">Quanta verkefni</comment>
+ <comment xml:lang="it">progetto di Quanta</comment>
+ <comment xml:lang="ja">Quanta プロジェクト</comment>
+ <comment xml:lang="kk">Quanta жобасы</comment>
+ <comment xml:lang="km">គម្រោង Quanta</comment>
+ <comment xml:lang="ko">Quanta 프로젝트</comment>
+ <comment xml:lang="lt">Quanta projektas</comment>
+ <comment xml:lang="lv">Quanta projekts</comment>
+ <comment xml:lang="ml">ക്വാണ്ട പദ്ധതി</comment>
+ <comment xml:lang="mr">क्वांटा परियोजना</comment>
+ <comment xml:lang="nb">Quanta-prosjekt</comment>
+ <comment xml:lang="nds">Quanta-Projekt</comment>
+ <comment xml:lang="nl">Quanta-project</comment>
+ <comment xml:lang="nn">Quanta-prosjekt</comment>
+ <comment xml:lang="pa">ਕੁਆਂਟਾ ਪਰੋਜੈਕਟ</comment>
+ <comment xml:lang="pl">Projekt Quanty</comment>
+ <comment xml:lang="pt">Projecto do Quanta</comment>
+ <comment xml:lang="pt_BR">Projeto do Quanta</comment>
+ <comment xml:lang="ro">Proiect Quanta</comment>
+ <comment xml:lang="ru">проект Quanta</comment>
+ <comment xml:lang="se">Quanta-prošeakta</comment>
+ <comment xml:lang="sk">Projekt Quanta</comment>
+ <comment xml:lang="sl">Projekt Quanta</comment>
+ <comment xml:lang="sr">Квантин пројекат</comment>
+ <comment xml:lang="sr@ijekavian">Квантин пројекат</comment>
+ <comment xml:lang="sr@ijekavianlatin">Quantin projekat</comment>
+ <comment xml:lang="sr@latin">Quantin projekat</comment>
+ <comment xml:lang="sv">Quanta-projekt</comment>
+ <comment xml:lang="th">เอกสารโครงงาน Quanta</comment>
+ <comment xml:lang="tr">Quanta projesi</comment>
+ <comment xml:lang="ug">Quanta قۇرۇلۇشى</comment>
+ <comment xml:lang="uk">проект Quanta</comment>
+ <comment xml:lang="zh_CN">Quanta 工程</comment>
+ <comment xml:lang="zh_TW">Quanta 專案</comment>
+ <glob pattern="*.quanta"/>
+ </mime-type>
+ <mime-type type="application/x-kommander">
+ <sub-class-of type="text/plain"/>
+ <comment>Kommander file</comment>
+ <comment xml:lang="ar">ملف Kommander</comment>
+ <comment xml:lang="bg">Файл на Kommander</comment>
+ <comment xml:lang="bs">Kommanderov fajl</comment>
+ <comment xml:lang="ca">Fitxer del Kommander</comment>
+ <comment xml:lang="ca@valencia">Fitxer del Kommander</comment>
+ <comment xml:lang="cs">Soubor Kommanderu</comment>
+ <comment xml:lang="da">Kommander-fil</comment>
+ <comment xml:lang="de">Kommander-Datei</comment>
+ <comment xml:lang="el">Αρχείο Kommander</comment>
+ <comment xml:lang="en_GB">Kommander file</comment>
+ <comment xml:lang="es">Archivo de Kommander</comment>
+ <comment xml:lang="et">Kommanderi fail</comment>
+ <comment xml:lang="eu">Kommander fitxategia</comment>
+ <comment xml:lang="fi">Kommander-tiedosto</comment>
+ <comment xml:lang="fr">Fichier Kommander</comment>
+ <comment xml:lang="ga">Comhad Kommander</comment>
+ <comment xml:lang="gd">faidhle Kommander</comment>
+ <comment xml:lang="gl">Ficheiro do Kommander</comment>
+ <comment xml:lang="hr">Kommander datoteka</comment>
+ <comment xml:lang="hu">Kommander-fájl</comment>
+ <comment xml:lang="ia">Kommander : file</comment>
+ <comment xml:lang="id">File kommander</comment>
+ <comment xml:lang="is">Kommander skrá</comment>
+ <comment xml:lang="it">file di Kommander</comment>
+ <comment xml:lang="ja">Kommander ファイル</comment>
+ <comment xml:lang="kk">Kommander файлы</comment>
+ <comment xml:lang="km">ឯកសាររបស់ Kommander</comment>
+ <comment xml:lang="ko">Kommander 파일</comment>
+ <comment xml:lang="lt">Kommander failas</comment>
+ <comment xml:lang="lv">Kommander fails</comment>
+ <comment xml:lang="ml">കോമാന്ഡെര് ഫയല്</comment>
+ <comment xml:lang="mr">कमांडर फाईल</comment>
+ <comment xml:lang="nb">Kommander-fil</comment>
+ <comment xml:lang="nds">Kommander-Datei</comment>
+ <comment xml:lang="nl">Kommander-bestand</comment>
+ <comment xml:lang="nn">Kommander-fil</comment>
+ <comment xml:lang="pa">Kommander ਫਾਈਲ</comment>
+ <comment xml:lang="pl">Plik Kommandera</comment>
+ <comment xml:lang="pt">Ficheiro do Kommander</comment>
+ <comment xml:lang="pt_BR">Arquivo do Kommander</comment>
+ <comment xml:lang="ro">Fișier Kommander</comment>
+ <comment xml:lang="ru">файл Kommander</comment>
+ <comment xml:lang="se">Kommanderfiila</comment>
+ <comment xml:lang="sk">Súbor Kommander</comment>
+ <comment xml:lang="sl">Datoteka Kommanderja</comment>
+ <comment xml:lang="sr">Командеров фајл</comment>
+ <comment xml:lang="sr@ijekavian">Командеров фајл</comment>
+ <comment xml:lang="sr@ijekavianlatin">Kommanderov fajl</comment>
+ <comment xml:lang="sr@latin">Kommanderov fajl</comment>
+ <comment xml:lang="sv">Kommander-fil</comment>
+ <comment xml:lang="tr">Kommander dosyası</comment>
+ <comment xml:lang="ug">Kommander ھۆججەت</comment>
+ <comment xml:lang="uk">файл Kommander</comment>
+ <comment xml:lang="zh_CN">Kommander 文件</comment>
+ <comment xml:lang="zh_TW">Kommander 檔案</comment>
+ <glob pattern="*.kmdr"/>
+ </mime-type>
+
+ <mime-type type="application/x-tuberling">
+ <comment>potato</comment>
+ <comment xml:lang="ar">بطاطا</comment>
+ <comment xml:lang="bs">Krompirkova datoteka</comment>
+ <comment xml:lang="ca">Patata</comment>
+ <comment xml:lang="ca@valencia">Patata</comment>
+ <comment xml:lang="cs">brambora</comment>
+ <comment xml:lang="da">potato</comment>
+ <comment xml:lang="de">potato</comment>
+ <comment xml:lang="el">πατάτα</comment>
+ <comment xml:lang="en_GB">potato</comment>
+ <comment xml:lang="es">potato</comment>
+ <comment xml:lang="et">potato</comment>
+ <comment xml:lang="eu">potato</comment>
+ <comment xml:lang="fi">peruna</comment>
+ <comment xml:lang="fr">patate</comment>
+ <comment xml:lang="ga">práta</comment>
+ <comment xml:lang="gd">buntàta</comment>
+ <comment xml:lang="gl">potato</comment>
+ <comment xml:lang="hr">potato</comment>
+ <comment xml:lang="hu">potato</comment>
+ <comment xml:lang="ia">patata</comment>
+ <comment xml:lang="id">potato</comment>
+ <comment xml:lang="is">Kartafla (potato)</comment>
+ <comment xml:lang="it">patata</comment>
+ <comment xml:lang="ja">potato</comment>
+ <comment xml:lang="kk">картоп</comment>
+ <comment xml:lang="km">ដំឡូង</comment>
+ <comment xml:lang="ko">potato</comment>
+ <comment xml:lang="lt">bulvė</comment>
+ <comment xml:lang="lv">kartupelis</comment>
+ <comment xml:lang="ml">ഉരുള കിഴങ്ങ്</comment>
+ <comment xml:lang="mr">पोटेटो</comment>
+ <comment xml:lang="nb">potato</comment>
+ <comment xml:lang="nds">Kantüffel</comment>
+ <comment xml:lang="nl">aardappel</comment>
+ <comment xml:lang="nn">potato</comment>
+ <comment xml:lang="pa">ਆਲੂ</comment>
+ <comment xml:lang="pl">potato</comment>
+ <comment xml:lang="pt">batata</comment>
+ <comment xml:lang="pt_BR">batata</comment>
+ <comment xml:lang="ro">cartof</comment>
+ <comment xml:lang="ru">картофельный парень</comment>
+ <comment xml:lang="se">buđet</comment>
+ <comment xml:lang="sk">potato</comment>
+ <comment xml:lang="sl">krompirček</comment>
+ <comment xml:lang="sq">potato</comment>
+ <comment xml:lang="sr">Кромпирков фајл</comment>
+ <comment xml:lang="sr@ijekavian">Кромпирков фајл</comment>
+ <comment xml:lang="sr@ijekavianlatin">Krompirkov fajl</comment>
+ <comment xml:lang="sr@latin">Krompirkov fajl</comment>
+ <comment xml:lang="sv">potatis</comment>
+ <comment xml:lang="tr">patates</comment>
+ <comment xml:lang="ug">ياڭيۇ</comment>
+ <comment xml:lang="uk">картоплина</comment>
+ <comment xml:lang="zh_CN">potato</comment>
+ <comment xml:lang="zh_TW">馬鈴薯</comment>
+ <glob pattern="*.tuberling"/>
+ </mime-type>
+ <mime-type type="application/x-kolf">
+ <comment>Kolf saved game</comment>
+ <comment xml:lang="ar">لعبة Kolf محفوظة</comment>
+ <comment xml:lang="bg">Запазена игра на Kolf</comment>
+ <comment xml:lang="bs">Kolfova sačuvana igra</comment>
+ <comment xml:lang="ca">Joc desat del Kolf</comment>
+ <comment xml:lang="ca@valencia">Joc guardat del Kolf</comment>
+ <comment xml:lang="cs">Uložená hra Kolf</comment>
+ <comment xml:lang="da">Gemt spil til Kolf</comment>
+ <comment xml:lang="de">Kolf – gespeichertes Spiel</comment>
+ <comment xml:lang="el">Αποθηκευμένο παιχνίδι Kolf</comment>
+ <comment xml:lang="en_GB">Kolf saved game</comment>
+ <comment xml:lang="es">Juego guardado de Kolf</comment>
+ <comment xml:lang="et">Kolfi salvestatud mäng</comment>
+ <comment xml:lang="eu">Kolf-ek gordetako jokaldia</comment>
+ <comment xml:lang="fi">Tallennettu Kolf-peli</comment>
+ <comment xml:lang="fr">Partie enregistrée de Kolf </comment>
+ <comment xml:lang="ga">Cluiche sábháilte Kolf</comment>
+ <comment xml:lang="gd">geama Kolf air a shàbhaladh</comment>
+ <comment xml:lang="gl">Partida de Kolf</comment>
+ <comment xml:lang="hr">Kolf spremljena igra</comment>
+ <comment xml:lang="hu">Kolf mentett állás</comment>
+ <comment xml:lang="ia">Kolf : Joco salveguardate</comment>
+ <comment xml:lang="id">Simpanan permainan Kolf</comment>
+ <comment xml:lang="is">Vistaður Kolf leikur</comment>
+ <comment xml:lang="it">partita salvata di Kolf</comment>
+ <comment xml:lang="ja">Kolf 保存されたゲーム</comment>
+ <comment xml:lang="kk">Kolf сақталған ойыны</comment>
+ <comment xml:lang="km">ល្បែងដែលបានរក្សាទុករបស់ Kolf</comment>
+ <comment xml:lang="ko">Kolf 저장된 게임</comment>
+ <comment xml:lang="lt">Kolf išsaugotas žaidimas</comment>
+ <comment xml:lang="lv">Kolf saglabāta spēle</comment>
+ <comment xml:lang="ml">കോള്ഫ് ശേഖരിച്ച കളി</comment>
+ <comment xml:lang="mr">कोल्फ साठवलेला खेळ</comment>
+ <comment xml:lang="nb">Kolf lagret spill</comment>
+ <comment xml:lang="nds">Sekert Kolf-Speel</comment>
+ <comment xml:lang="nl">Opgeslagen Kolf-spel</comment>
+ <comment xml:lang="nn">Lagra Kolf-spel</comment>
+ <comment xml:lang="pa">Kolf ਸੰਭਾਲੀ ਖੇਡ</comment>
+ <comment xml:lang="pl">Zapisana gra Kolfa</comment>
+ <comment xml:lang="pt">Jogo gravado do Kolf</comment>
+ <comment xml:lang="pt_BR">Jogo salvo do Kolf</comment>
+ <comment xml:lang="ro">Joc salvat Kolf</comment>
+ <comment xml:lang="ru">сохранённая игра Kolf</comment>
+ <comment xml:lang="se">Kolf vurkejuvvon speallu</comment>
+ <comment xml:lang="sk">Uložená hra Kolf</comment>
+ <comment xml:lang="sl">Shranjena igra Kolf</comment>
+ <comment xml:lang="sr">Колфова сачувана игра</comment>
+ <comment xml:lang="sr@ijekavian">Колфова сачувана игра</comment>
+ <comment xml:lang="sr@ijekavianlatin">Kolfova sačuvana igra</comment>
+ <comment xml:lang="sr@latin">Kolfova sačuvana igra</comment>
+ <comment xml:lang="sv">Kolf sparat spel</comment>
+ <comment xml:lang="th">ข้อมูลที่บันทึกไว้ของเกม Kolf</comment>
+ <comment xml:lang="tr">Kolf kaydedilmiş oyunu</comment>
+ <comment xml:lang="ug">Kolf ساقلىغان ئويۇن</comment>
+ <comment xml:lang="uk">збережена гра Kolf</comment>
+ <comment xml:lang="zh_CN">Kolf 保存的游戏</comment>
+ <comment xml:lang="zh_TW">Kolf 儲存遊戲</comment>
+ <magic priority="80">
+ <match offset="0" type="string" value="[0 Saved Game]" />
+ </magic>
+ <glob pattern="*.kolfgame"/>
+ </mime-type>
+ <mime-type type="application/x-kourse">
+ <comment>Kolf course</comment>
+ <comment xml:lang="ar">دورة Kolf</comment>
+ <comment xml:lang="bs">Kolfov teren</comment>
+ <comment xml:lang="ca">Camp del Kolf</comment>
+ <comment xml:lang="ca@valencia">Camp del Kolf</comment>
+ <comment xml:lang="cs">Kurz Kolf</comment>
+ <comment xml:lang="da">Kolf-bane</comment>
+ <comment xml:lang="de">Kolf-Parcour</comment>
+ <comment xml:lang="el">Πίστα Kolf</comment>
+ <comment xml:lang="en_GB">Kolf course</comment>
+ <comment xml:lang="es">Campo de Kolf</comment>
+ <comment xml:lang="et">Kolfiväljak</comment>
+ <comment xml:lang="eu">Kolf ikastaroa</comment>
+ <comment xml:lang="fi">Kolf-rata</comment>
+ <comment xml:lang="fr">Parcours Kolf</comment>
+ <comment xml:lang="ga">Cúrsa Kolf</comment>
+ <comment xml:lang="gd">raon Kolf</comment>
+ <comment xml:lang="gl">Campo de Kolf</comment>
+ <comment xml:lang="hr">Kolf staza</comment>
+ <comment xml:lang="hu">Kolf-pálya</comment>
+ <comment xml:lang="ia">Kolf : curso</comment>
+ <comment xml:lang="id">Haluan Kolf</comment>
+ <comment xml:lang="is">Kolf braut</comment>
+ <comment xml:lang="it">campo da Kolf</comment>
+ <comment xml:lang="ja">Kolf コース</comment>
+ <comment xml:lang="kk">Kolf алаңы</comment>
+ <comment xml:lang="km">វគ្គរបស់ Kolf</comment>
+ <comment xml:lang="ko">Kolf 코스</comment>
+ <comment xml:lang="lt">Kolf laukas</comment>
+ <comment xml:lang="lv">Kolf kurss</comment>
+ <comment xml:lang="ml">കോള്ഫ് കോഴ്സ്</comment>
+ <comment xml:lang="mr">कोल्फ कोर्स</comment>
+ <comment xml:lang="nb">Kolf-bane</comment>
+ <comment xml:lang="nds">Kolf-Platz</comment>
+ <comment xml:lang="nl">Kolf-baan</comment>
+ <comment xml:lang="nn">Kolf-bane</comment>
+ <comment xml:lang="pa">Kolf ਕੋਰਸ</comment>
+ <comment xml:lang="pl">Opis dołka Kolfa</comment>
+ <comment xml:lang="pt">Campo do Kolf</comment>
+ <comment xml:lang="pt_BR">Campo de golfe</comment>
+ <comment xml:lang="ro">Curs de Kolf</comment>
+ <comment xml:lang="ru">площадка Kolf</comment>
+ <comment xml:lang="se">Kolfbána</comment>
+ <comment xml:lang="sk">Kurz Kolf</comment>
+ <comment xml:lang="sl">Igrišče Kolf</comment>
+ <comment xml:lang="sr">Колфов терен</comment>
+ <comment xml:lang="sr@ijekavian">Колфов терен</comment>
+ <comment xml:lang="sr@ijekavianlatin">Kolfov teren</comment>
+ <comment xml:lang="sr@latin">Kolfov teren</comment>
+ <comment xml:lang="sv">Kolfbana</comment>
+ <comment xml:lang="th">คอร์สของเกม Kolf</comment>
+ <comment xml:lang="tr">Kolf etabı</comment>
+ <comment xml:lang="ug">Kolf دەرسلىكى</comment>
+ <comment xml:lang="uk">майданчик Kolf</comment>
+ <comment xml:lang="zh_CN">Kolf 教程</comment>
+ <comment xml:lang="zh_TW">Kolf 球場</comment>
+ <magic priority="80">
+ <match offset="0" type="string" value="[0-course@-50,-50]" />
+ </magic>
+ <glob pattern="*.kolf"/>
+ <glob pattern="*.course"/>
+ <glob pattern="*.kourse"/>
+ </mime-type>
+
+ <mime-type type="application/vnd.kde.okular-archive">
+ <comment>Okular document archive</comment>
+ <comment xml:lang="ar">أرشيف مستند أوكلار</comment>
+ <comment xml:lang="bs">Okularova arhiva dokumenata</comment>
+ <comment xml:lang="ca">Arxiu de document de l'Okular</comment>
+ <comment xml:lang="ca@valencia">Arxiu de document de l'Okular</comment>
+ <comment xml:lang="cs">Archiv dokumentu Okular</comment>
+ <comment xml:lang="da">Okular dokumentarkiv</comment>
+ <comment xml:lang="de">Okular-Dokumentarchiv</comment>
+ <comment xml:lang="el">Αρχειοθήκη εγγράφου Okular</comment>
+ <comment xml:lang="en_GB">Okular document archive</comment>
+ <comment xml:lang="es">Archivo de documento de Okular</comment>
+ <comment xml:lang="et">Okulari dokumendiarhiiv</comment>
+ <comment xml:lang="eu">Okular dokumentu-artxiboa</comment>
+ <comment xml:lang="fi">Okular-tiedostoarkisto</comment>
+ <comment xml:lang="fr">Archive de documents Okular</comment>
+ <comment xml:lang="ga">Cartlann cáipéisí Okular</comment>
+ <comment xml:lang="gd">tasglann sgrìobhainnean Okular</comment>
+ <comment xml:lang="gl">Arquivo de documento de Okular</comment>
+ <comment xml:lang="hr">arhiva dokumenta za Okular</comment>
+ <comment xml:lang="hu">Okular-archívum</comment>
+ <comment xml:lang="ia">Okular : archivo de documento</comment>
+ <comment xml:lang="id">Arsip dokumen Okular</comment>
+ <comment xml:lang="is">Okular skjalasafnskrá</comment>
+ <comment xml:lang="it">archivio di documenti di Okular</comment>
+ <comment xml:lang="ja">Okular 文書アーカイブ</comment>
+ <comment xml:lang="kk">Okular құжат архиві</comment>
+ <comment xml:lang="km">ប័ណ្ណសារឯកសាររបស់ Okular</comment>
+ <comment xml:lang="ko">Okular 문서 압축 파일</comment>
+ <comment xml:lang="lt">Okular dokumento archyvas</comment>
+ <comment xml:lang="lv">Okular dokumentu arhīvs</comment>
+ <comment xml:lang="ml">ഓക്കുലാര് രേഖകളുടെ ശേഖരം</comment>
+ <comment xml:lang="mr">ओक्युलर दस्तऐवज संग्रह</comment>
+ <comment xml:lang="nb">Okular dokumentarkiv</comment>
+ <comment xml:lang="nds">Okular-Dokmentenarchiev</comment>
+ <comment xml:lang="nl">Okular-documentarchief</comment>
+ <comment xml:lang="nn">Okular-dokumentarkiv</comment>
+ <comment xml:lang="pa">ਓਕੁਲਾਰ ਡੌਕੂਮੈਂਟ ਅਕਾਇਵ</comment>
+ <comment xml:lang="pl">Archiwum dokumentu Okulara</comment>
+ <comment xml:lang="pt">Pacote de documentos do Okular</comment>
+ <comment xml:lang="pt_BR">Arquivo de documento do Okular</comment>
+ <comment xml:lang="ro">Arhivă cu documente Okular</comment>
+ <comment xml:lang="ru">архив Okular</comment>
+ <comment xml:lang="se">Okular dokumeantaarkiiva</comment>
+ <comment xml:lang="sk">Archív dokumentu Okular</comment>
+ <comment xml:lang="sl">Arhiv dokumentov za Okular</comment>
+ <comment xml:lang="sr">Окуларова архива докумената</comment>
+ <comment xml:lang="sr@ijekavian">Окуларова архива докумената</comment>
+ <comment xml:lang="sr@ijekavianlatin">Okularova arhiva dokumenata</comment>
+ <comment xml:lang="sr@latin">Okularova arhiva dokumenata</comment>
+ <comment xml:lang="sv">Okular-dokumentarkiv</comment>
+ <comment xml:lang="th">แฟ้มจัดเก็บเอกสารของ Okular</comment>
+ <comment xml:lang="tr">Okular belge arşivi</comment>
+ <comment xml:lang="ug">Okular پۈتۈك ئارخىپى</comment>
+ <comment xml:lang="uk">архів документа Okular</comment>
+ <comment xml:lang="zh_CN">Okular 文档归档</comment>
+ <comment xml:lang="zh_TW">Okular 文件歸檔</comment>
+ <glob pattern="*.okular"/>
+ </mime-type>
+
+ <mime-type type="application/x-cabri">
+ <comment>Cabri figure</comment>
+ <comment xml:lang="ar">صورة Cabri</comment>
+ <comment xml:lang="bs">Cabrijev crtež</comment>
+ <comment xml:lang="ca">Figura del Cabri</comment>
+ <comment xml:lang="ca@valencia">Figura del Cabri</comment>
+ <comment xml:lang="cs">Obrázek Cabri</comment>
+ <comment xml:lang="da">Cabri-figur</comment>
+ <comment xml:lang="de">Cabri-Zeichnung</comment>
+ <comment xml:lang="el">Σχήμα Cabri</comment>
+ <comment xml:lang="en_GB">Cabri figure</comment>
+ <comment xml:lang="es">Figura de Cabri</comment>
+ <comment xml:lang="et">Cabri kujund</comment>
+ <comment xml:lang="eu">Cabri irudia</comment>
+ <comment xml:lang="fi">Cabri-kuvio</comment>
+ <comment xml:lang="fr">Figure Cabri</comment>
+ <comment xml:lang="ga">Léaráid Cabri</comment>
+ <comment xml:lang="gd">figear Cabri</comment>
+ <comment xml:lang="gl">Figura de Cabri</comment>
+ <comment xml:lang="hr">Cabri figura</comment>
+ <comment xml:lang="hu">Cabri-alakzat</comment>
+ <comment xml:lang="ia">Cabri : Figura</comment>
+ <comment xml:lang="id">Sosok Cabri</comment>
+ <comment xml:lang="is">Cabri teikning</comment>
+ <comment xml:lang="it">figura Cabri</comment>
+ <comment xml:lang="ja">Cabri figure</comment>
+ <comment xml:lang="kk">Cabri суреті</comment>
+ <comment xml:lang="km">Cabri figure</comment>
+ <comment xml:lang="ko">Cabri 그림</comment>
+ <comment xml:lang="lt">Cabri figūra</comment>
+ <comment xml:lang="lv">Cabri figūra</comment>
+ <comment xml:lang="ml">കാബ്രി ചിത്രം</comment>
+ <comment xml:lang="mr">Cabri आकृती</comment>
+ <comment xml:lang="ms">Figur Cabri</comment>
+ <comment xml:lang="nb">Cabri-figur</comment>
+ <comment xml:lang="nds">"Cabri"-Grafik</comment>
+ <comment xml:lang="nl">Cabri-figuur</comment>
+ <comment xml:lang="nn">Cabri-figur</comment>
+ <comment xml:lang="pa">Cabri ਸ਼ਕਲ</comment>
+ <comment xml:lang="pl">Rysunek Cabri</comment>
+ <comment xml:lang="pt">Imagem do Cabri</comment>
+ <comment xml:lang="pt_BR">Imagem do Cabri</comment>
+ <comment xml:lang="ro">Figură Cabri</comment>
+ <comment xml:lang="ru">чертёж Cabri</comment>
+ <comment xml:lang="se">Cabri-govadat</comment>
+ <comment xml:lang="sk">Obrázok Cabri</comment>
+ <comment xml:lang="sl">Lik Cabri</comment>
+ <comment xml:lang="sq">Cabri figure</comment>
+ <comment xml:lang="sr">Кабријев цртеж</comment>
+ <comment xml:lang="sr@ijekavian">Кабријев цртеж</comment>
+ <comment xml:lang="sr@ijekavianlatin">Cabrijev crtež</comment>
+ <comment xml:lang="sr@latin">Cabrijev crtež</comment>
+ <comment xml:lang="sv">Cabri-figur</comment>
+ <comment xml:lang="tr">Cabri çizimi</comment>
+ <comment xml:lang="ug">Cabri شەكىللەر</comment>
+ <comment xml:lang="uk">рисунок Cabri</comment>
+ <comment xml:lang="zh_CN">Cabri 图形</comment>
+ <comment xml:lang="zh_TW">Cabri 圖形</comment>
+ <magic priority="80">
+ <match offset="0" type="string" value="FIGURE CabriII vers. " /> <!-- Cabri 1.0 -->
+ <match offset="0" type="string" value="Figure Cabri II " /> <!-- Cabri 1.2 -->
+ </magic>
+ <glob pattern="*.fig"/>
+ </mime-type>
+ <mime-type type="application/x-drgeo">
+ <comment>Dr. Geo figure</comment>
+ <comment xml:lang="ar">صورة Dr. Geo</comment>
+ <comment xml:lang="bs">Dr Geov crtež</comment>
+ <comment xml:lang="ca">Figura del Dr. Geo</comment>
+ <comment xml:lang="ca@valencia">Figura del Dr. Geo</comment>
+ <comment xml:lang="cs">Obrázek Dr. Geo</comment>
+ <comment xml:lang="da">Dr. Geo-figur</comment>
+ <comment xml:lang="de">Dr.-Geo-Zeichnung</comment>
+ <comment xml:lang="el">Σχήμα Dr. Geo</comment>
+ <comment xml:lang="en_GB">Dr. Geo figure</comment>
+ <comment xml:lang="es">Figura de Dr. Geo</comment>
+ <comment xml:lang="et">Dr. Geo kujund</comment>
+ <comment xml:lang="eu">Geo Dk. irudia</comment>
+ <comment xml:lang="fi">Dr. Geo -kuvio</comment>
+ <comment xml:lang="fr">Figure « Dr. Geo »</comment>
+ <comment xml:lang="ga">Léaráid Dr. Geo</comment>
+ <comment xml:lang="gd">figear Dr. Geo</comment>
+ <comment xml:lang="gl">Figura de Dr. Geo</comment>
+ <comment xml:lang="hr">Dr. Geo figura</comment>
+ <comment xml:lang="hu">Dr. Geo-alakzat</comment>
+ <comment xml:lang="ia">Dr.Geo : Figura</comment>
+ <comment xml:lang="id">Sosok Dr. Geo</comment>
+ <comment xml:lang="is">Dr. Geo teikning</comment>
+ <comment xml:lang="it">figura Dr. Geo</comment>
+ <comment xml:lang="ja">Dr. Geo figure</comment>
+ <comment xml:lang="kk">Dr. Geo суреті</comment>
+ <comment xml:lang="km">Dr. Geo figure</comment>
+ <comment xml:lang="ko">Dr. Geo 그림</comment>
+ <comment xml:lang="lt">Dr. Geo figūra</comment>
+ <comment xml:lang="lv">Dr. Geo figūra</comment>
+ <comment xml:lang="ml">ഡോ. ജിയോ ചിത്രം</comment>
+ <comment xml:lang="mr">डॉ.जिओ आकृती</comment>
+ <comment xml:lang="ms">Figur Dr. Geo</comment>
+ <comment xml:lang="nb">Dr. Geo figure</comment>
+ <comment xml:lang="nds">"Dr. Geo"-Grafik</comment>
+ <comment xml:lang="nl">Dr. Geo-figuur</comment>
+ <comment xml:lang="nn">Dr. Geo-figur</comment>
+ <comment xml:lang="pa">Dr. Geo ਸ਼ਕਲ</comment>
+ <comment xml:lang="pl">Rysunek Dr. Geo</comment>
+ <comment xml:lang="pt">Imagem do Dr. Geo</comment>
+ <comment xml:lang="pt_BR">Imagem do Dr. Geo</comment>
+ <comment xml:lang="ro">Figură Dr. Geo</comment>
+ <comment xml:lang="ru">чертёж Dr. Geo</comment>
+ <comment xml:lang="se">Dr. Geo-govadat</comment>
+ <comment xml:lang="sk">Obrázok Dr. Geo</comment>
+ <comment xml:lang="sl">Lik Dr. Geo</comment>
+ <comment xml:lang="sq">Dr. Geo figure</comment>
+ <comment xml:lang="sr">Др Геов цртеж</comment>
+ <comment xml:lang="sr@ijekavian">Др Геов цртеж</comment>
+ <comment xml:lang="sr@ijekavianlatin">Dr Geov crtež</comment>
+ <comment xml:lang="sr@latin">Dr Geov crtež</comment>
+ <comment xml:lang="sv">Dr. Geo-figur</comment>
+ <comment xml:lang="tr">Dr. Geo çizimi</comment>
+ <comment xml:lang="ug">Dr. Geo شەكىللىرى</comment>
+ <comment xml:lang="uk">рисунок Dr. Geo</comment>
+ <comment xml:lang="zh_CN">Dr. Geo 图形</comment>
+ <comment xml:lang="zh_TW">Dr. Geo 圖形</comment>
+ <magic priority="80">
+ <match offset="0" type="string" value="<?xml version="1.0"?>\n<drgenius>" />
+ </magic>
+ <glob pattern="*.fgeo"/>
+ </mime-type>
+ <mime-type type="application/x-kgeo">
+ <comment>KGeo figure</comment>
+ <comment xml:lang="ar">صورة KGeo</comment>
+ <comment xml:lang="bg">Фигура за KGeo</comment>
+ <comment xml:lang="bs">KGeov crtež</comment>
+ <comment xml:lang="ca">Figura del KGeo</comment>
+ <comment xml:lang="ca@valencia">Figura del KGeo</comment>
+ <comment xml:lang="cs">Obrázek KGeo</comment>
+ <comment xml:lang="da">KGeo-figur</comment>
+ <comment xml:lang="de">KGeo-Zeichnung</comment>
+ <comment xml:lang="el">Σχήμα KGeo </comment>
+ <comment xml:lang="en_GB">KGeo figure</comment>
+ <comment xml:lang="es">Figura de KGeo</comment>
+ <comment xml:lang="et">KGeo kujund</comment>
+ <comment xml:lang="eu">KGeo irudia</comment>
+ <comment xml:lang="fi">KGeo-kuvio</comment>
+ <comment xml:lang="fr">Figure KGeo</comment>
+ <comment xml:lang="ga">Léaráid KGeo</comment>
+ <comment xml:lang="gd">figear KGeo</comment>
+ <comment xml:lang="gl">Figura de KGeo</comment>
+ <comment xml:lang="hr">KGeo skica</comment>
+ <comment xml:lang="hu">KGeo-alakzat</comment>
+ <comment xml:lang="ia">KGeo : Figura</comment>
+ <comment xml:lang="id">Sosok KGeo</comment>
+ <comment xml:lang="is">KGeo teikning</comment>
+ <comment xml:lang="it">figura di KGeo</comment>
+ <comment xml:lang="ja">KGeo figure</comment>
+ <comment xml:lang="kk">KGeo суреті</comment>
+ <comment xml:lang="km">KGeo figure</comment>
+ <comment xml:lang="ko">KGeo 그림</comment>
+ <comment xml:lang="lt">KGeo figūra</comment>
+ <comment xml:lang="lv">KGeo figūra</comment>
+ <comment xml:lang="ml">കെജിയോ ചിത്രം</comment>
+ <comment xml:lang="mr">के-जिओ आकृती</comment>
+ <comment xml:lang="nb">KGeo-figur</comment>
+ <comment xml:lang="nds">KGeo-Bild</comment>
+ <comment xml:lang="nl">KGeo-figuur</comment>
+ <comment xml:lang="nn">KGeo-figur</comment>
+ <comment xml:lang="pa">KGeo ਸ਼ਕਲ</comment>
+ <comment xml:lang="pl">Rysunek KGeo</comment>
+ <comment xml:lang="pt">Imagem do KGeo</comment>
+ <comment xml:lang="pt_BR">Imagem do KGeo</comment>
+ <comment xml:lang="ro">Figură KGeo</comment>
+ <comment xml:lang="ru">чертёж KGeo</comment>
+ <comment xml:lang="se">KGeo-govadat</comment>
+ <comment xml:lang="sk">Obrázok KGeo</comment>
+ <comment xml:lang="sl">Lik KGeo</comment>
+ <comment xml:lang="sr">К‑геов цртеж</comment>
+ <comment xml:lang="sr@ijekavian">К‑геов цртеж</comment>
+ <comment xml:lang="sr@ijekavianlatin">KGeov crtež</comment>
+ <comment xml:lang="sr@latin">KGeov crtež</comment>
+ <comment xml:lang="sv">Kgeo-figur</comment>
+ <comment xml:lang="tr">KGeo çizimi</comment>
+ <comment xml:lang="ug">KGeo شەكىللەر</comment>
+ <comment xml:lang="uk">рисунок KGeo</comment>
+ <comment xml:lang="zh_CN">KGeo 图形</comment>
+ <comment xml:lang="zh_TW">KGeo 圖形</comment>
+ <glob pattern="*.kgeo"/>
+ </mime-type>
+ <mime-type type="application/x-kig">
+ <comment>Kig figure</comment>
+ <comment xml:lang="ar">صورة Kig</comment>
+ <comment xml:lang="bg">Фигура за Kig</comment>
+ <comment xml:lang="bs">KIG‑ov crtež</comment>
+ <comment xml:lang="ca">Figura del Kig</comment>
+ <comment xml:lang="ca@valencia">Figura del Kig</comment>
+ <comment xml:lang="cs">Obrázek Kig</comment>
+ <comment xml:lang="da">Kig-figur</comment>
+ <comment xml:lang="de">Kig-Zeichnung</comment>
+ <comment xml:lang="el">Σχήμα Kig</comment>
+ <comment xml:lang="en_GB">Kig figure</comment>
+ <comment xml:lang="es">Figura de Kig</comment>
+ <comment xml:lang="et">Kigi kujund</comment>
+ <comment xml:lang="eu">Kig irudia</comment>
+ <comment xml:lang="fi">Kig-kuvio</comment>
+ <comment xml:lang="fr">Dessin Kig</comment>
+ <comment xml:lang="ga">Léaráid Kig</comment>
+ <comment xml:lang="gd">figear Kig</comment>
+ <comment xml:lang="gl">Figura de Kig</comment>
+ <comment xml:lang="hr">Kig figura</comment>
+ <comment xml:lang="hu">Kig-alakzat</comment>
+ <comment xml:lang="ia">Kig : figura</comment>
+ <comment xml:lang="id">Sosok Kig</comment>
+ <comment xml:lang="is">Kig teikning</comment>
+ <comment xml:lang="it">figura di Kig</comment>
+ <comment xml:lang="ja">Kig figure</comment>
+ <comment xml:lang="kk">Kig суреті</comment>
+ <comment xml:lang="km">Kig figure</comment>
+ <comment xml:lang="ko">Kig 그림</comment>
+ <comment xml:lang="lt">Kig figūra</comment>
+ <comment xml:lang="lv">Kig figūra</comment>
+ <comment xml:lang="ml">കിഗ് ചിത്രം</comment>
+ <comment xml:lang="mr">किग आकृती</comment>
+ <comment xml:lang="nb">Kig-figur</comment>
+ <comment xml:lang="nds">Kig-Grafik</comment>
+ <comment xml:lang="nl">Kig-figuur</comment>
+ <comment xml:lang="nn">Kig-figur</comment>
+ <comment xml:lang="pa">Kig ਸ਼ਕਲ</comment>
+ <comment xml:lang="pl">Rysunek Kig</comment>
+ <comment xml:lang="pt">Imagem do Kig</comment>
+ <comment xml:lang="pt_BR">Imagem do Kig</comment>
+ <comment xml:lang="ro">Figură Kig</comment>
+ <comment xml:lang="ru">чертёж Kig</comment>
+ <comment xml:lang="se">Kig-govadat</comment>
+ <comment xml:lang="sk">Obrázok Kig</comment>
+ <comment xml:lang="sl">Lik Kig</comment>
+ <comment xml:lang="sr">КИГ‑ов цртеж</comment>
+ <comment xml:lang="sr@ijekavian">КИГ‑ов цртеж</comment>
+ <comment xml:lang="sr@ijekavianlatin">KIG‑ov crtež</comment>
+ <comment xml:lang="sr@latin">KIG‑ov crtež</comment>
+ <comment xml:lang="sv">Kig-figur</comment>
+ <comment xml:lang="tr">Kig çizimi</comment>
+ <comment xml:lang="ug">Kig شەكىللەر</comment>
+ <comment xml:lang="uk">рисунок Kig</comment>
+ <comment xml:lang="zh_CN">Kig 图形</comment>
+ <comment xml:lang="zh_TW">Kig 圖形</comment>
+ <glob pattern="*.kig"/>
+ <glob pattern="*.kigz"/>
+ </mime-type>
+ <mime-type type="application/x-kseg">
+ <comment>KSeg document</comment>
+ <comment xml:lang="ar">وثيقة KSeg</comment>
+ <comment xml:lang="bg">Документ KSeg</comment>
+ <comment xml:lang="bs">KSegov dokument</comment>
+ <comment xml:lang="ca">Document del KSeg</comment>
+ <comment xml:lang="ca@valencia">Document del KSeg</comment>
+ <comment xml:lang="cs">Dokument KSeg</comment>
+ <comment xml:lang="da">KSeg-dokument</comment>
+ <comment xml:lang="de">KSeg-Dokument</comment>
+ <comment xml:lang="el">Έγγραφο KSeg</comment>
+ <comment xml:lang="en_GB">KSeg document</comment>
+ <comment xml:lang="es">Documento de KSeg</comment>
+ <comment xml:lang="et">KSegi dokument</comment>
+ <comment xml:lang="eu">KSeg dokumentua</comment>
+ <comment xml:lang="fi">KSeg-tiedosto</comment>
+ <comment xml:lang="fr">Document KSeg</comment>
+ <comment xml:lang="ga">Cáipéis KSeg</comment>
+ <comment xml:lang="gd">sgrìobhainn KSeg</comment>
+ <comment xml:lang="gl">Documento de KSeg</comment>
+ <comment xml:lang="hr">KSeg dokument</comment>
+ <comment xml:lang="hu">KSeg-dokumentum</comment>
+ <comment xml:lang="ia">KSeg :documento</comment>
+ <comment xml:lang="id">Dokumen KSeg</comment>
+ <comment xml:lang="is">KSeg skjal</comment>
+ <comment xml:lang="it">documento di KSeg</comment>
+ <comment xml:lang="ja">KSeg 文書</comment>
+ <comment xml:lang="kk">KSeg құжаты</comment>
+ <comment xml:lang="km">ឯកសារ KSeg</comment>
+ <comment xml:lang="ko">KSeg 문서</comment>
+ <comment xml:lang="lt">KSeg dokumentas</comment>
+ <comment xml:lang="lv">KSeg dokuments</comment>
+ <comment xml:lang="ml">കെസെഗ് രേഖ</comment>
+ <comment xml:lang="mr">के-सेग दस्तऐवज</comment>
+ <comment xml:lang="nb">KSeg-dokument</comment>
+ <comment xml:lang="nds">KSeg-Dokment</comment>
+ <comment xml:lang="nl">KSeg-document</comment>
+ <comment xml:lang="nn">KSeg-dokument</comment>
+ <comment xml:lang="pa">KSeg ਡੌਕੂਮੈਂਟ</comment>
+ <comment xml:lang="pl">Dokument KSeg</comment>
+ <comment xml:lang="pt">Documento do KSeg</comment>
+ <comment xml:lang="pt_BR">Documento do KSeg</comment>
+ <comment xml:lang="ro">Document KSeg</comment>
+ <comment xml:lang="ru">документ KSeg</comment>
+ <comment xml:lang="se">KSeg dokumeanta</comment>
+ <comment xml:lang="sk">Dokument KSeg</comment>
+ <comment xml:lang="sl">Dokument KSeg</comment>
+ <comment xml:lang="sq">KSeg dokument</comment>
+ <comment xml:lang="sr">К‑сегов документ</comment>
+ <comment xml:lang="sr@ijekavian">К‑сегов документ</comment>
+ <comment xml:lang="sr@ijekavianlatin">KSegov dokument</comment>
+ <comment xml:lang="sr@latin">KSegov dokument</comment>
+ <comment xml:lang="sv">Kseg-dokument</comment>
+ <comment xml:lang="tr">KSeg belgesi</comment>
+ <comment xml:lang="ug">KSeg پۈتۈك</comment>
+ <comment xml:lang="uk">документ KSeg</comment>
+ <comment xml:lang="zh_CN">KSeg 文档</comment>
+ <comment xml:lang="zh_TW">KSeg 文件</comment>
+ <glob pattern="*.seg"/>
+ </mime-type>
+ <mime-type type="application/x-kvtml">
+ <sub-class-of type="application/xml"/>
+ <comment>vocabulary trainer document</comment>
+ <comment xml:lang="ar">وثيقة مدرب المفردات</comment>
+ <comment xml:lang="bs">dokument za uvježbavanje rječnika</comment>
+ <comment xml:lang="ca">Document de l'entrenador de vocabulari</comment>
+ <comment xml:lang="ca@valencia">Document de l'entrenador de vocabulari</comment>
+ <comment xml:lang="cs">Dokument tréningu slovní zásoby</comment>
+ <comment xml:lang="da">ordforrådstræningsdokument</comment>
+ <comment xml:lang="de">Vokabeltrainer-Dokument</comment>
+ <comment xml:lang="el">Αρχείο εκπαιδευτή λεξιλογίου</comment>
+ <comment xml:lang="en_GB">vocabulary trainer document</comment>
+ <comment xml:lang="es">documento de entrenador de vocabulario</comment>
+ <comment xml:lang="et">sõnavara treenija dokument</comment>
+ <comment xml:lang="eu">berbategi entrenatzaile dokumentua</comment>
+ <comment xml:lang="fi">sanavarastokouluttajatiedosto</comment>
+ <comment xml:lang="fr">Document d'apprentissage du vocabulaire</comment>
+ <comment xml:lang="ga">cáipéis traenálaí stóir focal</comment>
+ <comment xml:lang="gd">sgrìobhainn trèanair briathrachais</comment>
+ <comment xml:lang="gl">documento de práctica de vocabulario</comment>
+ <comment xml:lang="hr">dokument vokabularskog trenera</comment>
+ <comment xml:lang="hu">szógyűjtemény</comment>
+ <comment xml:lang="ia">documento de instructor de vocabulario</comment>
+ <comment xml:lang="id">dokumen pelatih kosakata</comment>
+ <comment xml:lang="is">orðaforðaþjálfunarskjal</comment>
+ <comment xml:lang="it">documento di allenamento a vocabolario</comment>
+ <comment xml:lang="ja">ボキャブラリトレーナー文書</comment>
+ <comment xml:lang="kk">сөздік жаттығу құжаты</comment>
+ <comment xml:lang="km">វាក្យស័ព្ទនៃឯកសាររបស់អ្នកបណ្ដុះបណ្ដាល</comment>
+ <comment xml:lang="ko">단어장</comment>
+ <comment xml:lang="lt">žodyno treniruoklio dokumentas</comment>
+ <comment xml:lang="lv">vārdnīcas trenētāja dokuments</comment>
+ <comment xml:lang="ml">പദാവലി പരിശീലന രേഖ</comment>
+ <comment xml:lang="mr">शब्द-संग्रह शिकवणारा दस्तऐवज</comment>
+ <comment xml:lang="nb">dokument for gloselæring</comment>
+ <comment xml:lang="nds">Vokavel-Lehrdokment</comment>
+ <comment xml:lang="nl">document voor woordenschattrainer</comment>
+ <comment xml:lang="nn">ordtreningsdokument</comment>
+ <comment xml:lang="pa">ਸ਼ਬਦਕੋਸ਼ ਟਰੇਨਰ ਡੌਕੂਮੈਂਟ</comment>
+ <comment xml:lang="pl">dokument związany z trenowaniem słownictwa</comment>
+ <comment xml:lang="pt">documento de treino de vocabulários</comment>
+ <comment xml:lang="pt_BR">documento de treino de vocabulários</comment>
+ <comment xml:lang="ro">Document de antrenare a vocabularului</comment>
+ <comment xml:lang="ru">тренировка словарного запаса</comment>
+ <comment xml:lang="se">sátnehárjehallandokumeanta</comment>
+ <comment xml:lang="sk">Dokument tréningu slovnej zásoby</comment>
+ <comment xml:lang="sl">dokument za vadbo besedišča</comment>
+ <comment xml:lang="sr">документ за увежбавање речника</comment>
+ <comment xml:lang="sr@ijekavian">документ за увјежбавање рјечника</comment>
+ <comment xml:lang="sr@ijekavianlatin">dokument za uvježbavanje rječnika</comment>
+ <comment xml:lang="sr@latin">dokument za uvežbavanje rečnika</comment>
+ <comment xml:lang="sv">dokument för ordförrådsövning</comment>
+ <comment xml:lang="tr">sözcük hazinesi çalışma belgesi</comment>
+ <comment xml:lang="ug">سۆزلۈك مەشىق پۈتۈكى</comment>
+ <comment xml:lang="uk">документ вправ зі словником</comment>
+ <comment xml:lang="zh_CN">词汇训练文档</comment>
+ <comment xml:lang="zh_TW">字彙訓練師文件</comment>
+ <glob pattern="*.kvtml"/>
+ </mime-type>
+ <mime-type type="application/x-kmplot">
+ <comment>KmPlot file</comment>
+ <comment xml:lang="ar">ملف KmPlot</comment>
+ <comment xml:lang="bg">Файл на KmPlot</comment>
+ <comment xml:lang="bs">KmPlot datoteka</comment>
+ <comment xml:lang="ca">Fitxer del KmPlot</comment>
+ <comment xml:lang="ca@valencia">Fitxer del KmPlot</comment>
+ <comment xml:lang="cs">Soubor KmPlot</comment>
+ <comment xml:lang="da">KmPlot-fil</comment>
+ <comment xml:lang="de">KmPlot-Datei</comment>
+ <comment xml:lang="el">Αρχείο KmPlot</comment>
+ <comment xml:lang="en_GB">KmPlot file</comment>
+ <comment xml:lang="es">Archivo de KmPlot</comment>
+ <comment xml:lang="et">KmPloti fail</comment>
+ <comment xml:lang="eu">KmPlot irudia</comment>
+ <comment xml:lang="fi">KmPlot-tiedosto</comment>
+ <comment xml:lang="fr">Fichier KmPlot</comment>
+ <comment xml:lang="ga">Comhad KmPlot</comment>
+ <comment xml:lang="gd">faidhle KmPlot</comment>
+ <comment xml:lang="gl">Ficheiro de KmPlot</comment>
+ <comment xml:lang="hr">KmPlot datoteka</comment>
+ <comment xml:lang="hu">KmPlot-fájl</comment>
+ <comment xml:lang="ia">KmPlot: file</comment>
+ <comment xml:lang="id">File KmPlot</comment>
+ <comment xml:lang="is">KmPlot skrá</comment>
+ <comment xml:lang="it">file di KmPlot</comment>
+ <comment xml:lang="ja">KmPlot ファイル</comment>
+ <comment xml:lang="kk">KmPlot файлы</comment>
+ <comment xml:lang="km">ឯកសារ KmPlot</comment>
+ <comment xml:lang="ko">KmPlot 파일</comment>
+ <comment xml:lang="lt">KmPlot failas</comment>
+ <comment xml:lang="lv">KmPlot fails</comment>
+ <comment xml:lang="ml">കെഎം പ്ലോട്ട് ഫയല്</comment>
+ <comment xml:lang="mr">के-एम-प्लोट फाईल</comment>
+ <comment xml:lang="nb">KmPlot-fil</comment>
+ <comment xml:lang="nds">KmPlot-Datei</comment>
+ <comment xml:lang="nl">KmPlot-bestand</comment>
+ <comment xml:lang="nn">KmPlot-fil</comment>
+ <comment xml:lang="pa">KmPlot ਫਾਈਲ</comment>
+ <comment xml:lang="pl">Plik KmPlot</comment>
+ <comment xml:lang="pt">Ficheiro do KmPlot</comment>
+ <comment xml:lang="pt_BR">Arquivo do KmPlot</comment>
+ <comment xml:lang="ro">Fișier KmPlot</comment>
+ <comment xml:lang="ru">файл KmPlot</comment>
+ <comment xml:lang="se">KmPlot fiila</comment>
+ <comment xml:lang="sk">Súbor KmPlot</comment>
+ <comment xml:lang="sl">Datoteka KmPlot</comment>
+ <comment xml:lang="sr">К‑матцртов фајл</comment>
+ <comment xml:lang="sr@ijekavian">К‑матцртов фајл</comment>
+ <comment xml:lang="sr@ijekavianlatin">K‑matcrtov fajl</comment>
+ <comment xml:lang="sr@latin">K‑matcrtov fajl</comment>
+ <comment xml:lang="sv">Kmplot-fil</comment>
+ <comment xml:lang="tr">KmPlot dosyası</comment>
+ <comment xml:lang="ug">KmPlot ھۆججەت</comment>
+ <comment xml:lang="uk">файл KmPlot</comment>
+ <comment xml:lang="zh_CN">KmPlot 文件</comment>
+ <comment xml:lang="zh_TW">KmPlot 檔案</comment>
+ <glob pattern="*.fkt"/>
+ </mime-type>
+ <mime-type type="application/x-kwordquiz">
+ <comment>KWordQuiz vocabulary</comment>
+ <comment xml:lang="ar">مفردات KWordQuiz</comment>
+ <comment xml:lang="bg">Речник KWordQuiz</comment>
+ <comment xml:lang="bs">rječnik K‑kviza-riječi</comment>
+ <comment xml:lang="ca">Vocabulari del KWordQuiz</comment>
+ <comment xml:lang="ca@valencia">Vocabulari del KWordQuiz</comment>
+ <comment xml:lang="cs">Slovní zásoba KWordQuiz</comment>
+ <comment xml:lang="da">Ordforråd til KWordQuiz</comment>
+ <comment xml:lang="de">KWordQuiz-Vokabular</comment>
+ <comment xml:lang="el">Λεξιλόγιο KWordQuiz</comment>
+ <comment xml:lang="en_GB">KWordQuiz vocabulary</comment>
+ <comment xml:lang="es">Vocabulario de KWordQuiz</comment>
+ <comment xml:lang="et">KWordQuizi sõnavara</comment>
+ <comment xml:lang="eu">KWordQuiz berbategia</comment>
+ <comment xml:lang="fi">KWordQuiz-sanasto</comment>
+ <comment xml:lang="fr">Vocabulaire KWordQuiz</comment>
+ <comment xml:lang="ga">Stór Focal KWordQuiz</comment>
+ <comment xml:lang="gd">briathrachas KWordQuiz</comment>
+ <comment xml:lang="gl">Vocabulario de KWordQuiz</comment>
+ <comment xml:lang="hr">KWordQuiz vokabular</comment>
+ <comment xml:lang="hu">KWordQuiz-szótár</comment>
+ <comment xml:lang="ia">KWordQuiz : vocabulario</comment>
+ <comment xml:lang="id">Kosakata KWordQuiz</comment>
+ <comment xml:lang="is">KWordQuiz orðaforði</comment>
+ <comment xml:lang="it">vocabolario di KWordQuiz</comment>
+ <comment xml:lang="ja">KWordQuiz ボキャブラリ</comment>
+ <comment xml:lang="kk">KWordQuiz сөздігі</comment>
+ <comment xml:lang="km">វាក្យស័ព្ទរបស់ KWordQuiz</comment>
+ <comment xml:lang="ko">KWordQuiz 단어장</comment>
+ <comment xml:lang="lt">KWordQuiz žodynas</comment>
+ <comment xml:lang="lv">KWordQuiz vārdnīca</comment>
+ <comment xml:lang="ml">കെവേര്ഡ്ക്യുസ്സ് പദാവലി</comment>
+ <comment xml:lang="mr">के-वर्ड-क्वीझ शब्द-संग्रह</comment>
+ <comment xml:lang="nb">KWordQuiz ordliste</comment>
+ <comment xml:lang="nds">KWordQuiz-Vokavelsett</comment>
+ <comment xml:lang="nl">KWordQuiz-woordenschat</comment>
+ <comment xml:lang="nn">KWordQuiz-vokabular</comment>
+ <comment xml:lang="pl">Słownictwo KWordQuiz</comment>
+ <comment xml:lang="pt">Vocabulário do KWordQuiz</comment>
+ <comment xml:lang="pt_BR">Vocabulário do KWordQuiz</comment>
+ <comment xml:lang="ro">Vocabular KWordQuiz</comment>
+ <comment xml:lang="ru">словарь KWordQuiz</comment>
+ <comment xml:lang="se">KWordQuiz-sátnegirji</comment>
+ <comment xml:lang="sk">Slovná zásoba KWordQuiz</comment>
+ <comment xml:lang="sl">Besedišče KWordQuiz</comment>
+ <comment xml:lang="sr">речник К‑квиза-ријечи</comment>
+ <comment xml:lang="sr@ijekavian">речник К‑квиза-ријечи</comment>
+ <comment xml:lang="sr@ijekavianlatin">rečnik K‑kviza-riječi</comment>
+ <comment xml:lang="sr@latin">rečnik K‑kviza-riječi</comment>
+ <comment xml:lang="sv">Kwordquiz-ordförråd</comment>
+ <comment xml:lang="tr">KWordQuiz sözcük hazinesi</comment>
+ <comment xml:lang="ug">KWordQuiz سۆزلۈكلەر</comment>
+ <comment xml:lang="uk">словник KWordQuiz</comment>
+ <comment xml:lang="zh_CN">KWordQuiz 词汇表</comment>
+ <comment xml:lang="zh_TW">KWordQuiz 字彙</comment>
+ <glob pattern="*.wql"/>
+ </mime-type>
+
+ <mime-type type="application/x-kcachegrind">
+ <comment>Cachegrind/Callgrind profile dump</comment>
+ <comment xml:lang="ar">تشكيلة تفريغ Cachegrind/Callgrind </comment>
+ <comment xml:lang="bs">Cachegrindov/Callgrindov profilni popis</comment>
+ <comment xml:lang="ca">Bolcat de l'anàlisi de rendiment del Cachegrind/Callgrind</comment>
+ <comment xml:lang="ca@valencia">Bolcat de l'anàlisi de rendiment del Cachegrind/Callgrind</comment>
+ <comment xml:lang="cs">Výpis profilu Cachegrind/Callgrind</comment>
+ <comment xml:lang="da">Cachegrind/Callgrind profil-dump</comment>
+ <comment xml:lang="de">Cachegrind/Callgrind-Profil-Ausgabe</comment>
+ <comment xml:lang="el">Αποτύπωση προφίλ Cachegrind/Callgrind</comment>
+ <comment xml:lang="en_GB">Cachegrind/Callgrind profile dump</comment>
+ <comment xml:lang="es">Volcado de análisis de rendimiento de Cachegrind/Callgrind</comment>
+ <comment xml:lang="et">Cachegrind/Callgrindi profileerimistõmmis</comment>
+ <comment xml:lang="eu">Cachegrind/Callgrind profil iraulketa</comment>
+ <comment xml:lang="fi">Cachegrind/Callgrind-profiilivedos</comment>
+ <comment xml:lang="fr">Vidage de profil Cachegrind / Callgrind</comment>
+ <comment xml:lang="ga">Próifíl dhumpáilte Cachegrind/Callgrind</comment>
+ <comment xml:lang="gd">dump pròifil Cachegrind/Callgrind</comment>
+ <comment xml:lang="gl">Envorcado de perfil de Cachegrind/Callgrind</comment>
+ <comment xml:lang="hr">Cachegrind/Callgrind odbačeni profil</comment>
+ <comment xml:lang="hu">Cachegrind/Callgrind-képfájl</comment>
+ <comment xml:lang="ia">Cachegrind/Callgrind : Discargatorio de profilo</comment>
+ <comment xml:lang="id">Gardu profil Cachegrind/Callgrind</comment>
+ <comment xml:lang="is">Cachegrind/Callgrind sniðdump</comment>
+ <comment xml:lang="it">dump di profilatura di Cachegrind e Callgrind</comment>
+ <comment xml:lang="ja">Cachegrind/Callgrind プロファイルダンプ</comment>
+ <comment xml:lang="kk">Cachegrind/Callgrind профильдеу дерегі</comment>
+ <comment xml:lang="km">ទម្រង់ Cachegrind/Callgrind</comment>
+ <comment xml:lang="ko">Cachegrind/Callgrind 프로필 덤프</comment>
+ <comment xml:lang="lt">Cachegrind/Callgrind profilio kopija</comment>
+ <comment xml:lang="lv">Cachegrind/Callgrind profilēšanas dati</comment>
+ <comment xml:lang="ml">കാഷ്ഗ്രിന്റ്/കാള്ഗ്രിന്റ് പ്രൊഫൈല് ഡമ്പ്</comment>
+ <comment xml:lang="mr">Cachegrind/Callgrind रूपरेषा डंप</comment>
+ <comment xml:lang="nb">Cachegrind/Callgrind profildump</comment>
+ <comment xml:lang="nds">Profilutgaav för Cachegrind/Callgrind</comment>
+ <comment xml:lang="nl">Cachegrind/Callgrind profieldump</comment>
+ <comment xml:lang="nn">Cachegrind/Callgrind-profildump</comment>
+ <comment xml:lang="pa">Cachegrind/Callgrind ਪਰੋਫਾਈਲ ਡੰਪ</comment>
+ <comment xml:lang="pl">Zrzut profilu Cachegrinda/Callgrinda</comment>
+ <comment xml:lang="pt">Resultado da análise do Cachegrind/Callgrind</comment>
+ <comment xml:lang="pt_BR">Resultado da análise do Cachegrind/Callgrind</comment>
+ <comment xml:lang="ro">profil salvat Cachegrind/Callgrind</comment>
+ <comment xml:lang="ru">данные профилирования Cachegrind/Callgrind</comment>
+ <comment xml:lang="se">Cachegrind/Callgrind-profiilaluoitin</comment>
+ <comment xml:lang="sk">Výpis profilu Cachegrind/Callgrind</comment>
+ <comment xml:lang="sl">Izpis profila Cachegrind/Callgrind</comment>
+ <comment xml:lang="sq">Cachegrind/Callgrind profile dump</comment>
+ <comment xml:lang="sr">Кешгриндов/Колгриндов профилни попис</comment>
+ <comment xml:lang="sr@ijekavian">Кешгриндов/Колгриндов профилни попис</comment>
+ <comment xml:lang="sr@ijekavianlatin">Cachegrindov/Callgrindov profilni popis</comment>
+ <comment xml:lang="sr@latin">Cachegrindov/Callgrindov profilni popis</comment>
+ <comment xml:lang="sv">Cachegrind/Callgrind-profileringsutskrift</comment>
+ <comment xml:lang="tr">Cachegrind/Callgrind profil dökümü</comment>
+ <comment xml:lang="ug">Cachegrind/Callgrind يېشىش سەپلىمە ھۆججىتى</comment>
+ <comment xml:lang="uk">дамп профілювання Cachegrind/Callgrind</comment>
+ <comment xml:lang="zh_CN">Cachegrind/Callgrind 剖析档案</comment>
+ <comment xml:lang="zh_TW">Cachegrind/Callgrind 分析檔傾印</comment>
+ <glob pattern="cachegrind.out*"/>
+ <glob pattern="callgrind.out*"/>
+ </mime-type>
+ <mime-type type="application/x-uml">
+ <comment>Umbrello UML Modeller file</comment>
+ <comment xml:lang="ar">ملف Umbrello UML Modeller </comment>
+ <comment xml:lang="bs">Umbrello UML datoteka</comment>
+ <comment xml:lang="ca">Fitxer del modelador UML Umbrello</comment>
+ <comment xml:lang="ca@valencia">Fitxer del modelador UML Umbrello</comment>
+ <comment xml:lang="cs">Soubor Umbrello UML Modeller</comment>
+ <comment xml:lang="da">Umbrello UML modelleringsfil</comment>
+ <comment xml:lang="de">Umbrello-UML-Datei</comment>
+ <comment xml:lang="el">Αρχείο μοντελοποίησης Umbrello UML</comment>
+ <comment xml:lang="en_GB">Umbrello UML Modeller file</comment>
+ <comment xml:lang="es">Archivo del modelador UML Umbrello</comment>
+ <comment xml:lang="et">Umbrello UML-fail</comment>
+ <comment xml:lang="eu">Umbrello UML Modeller fitxategia</comment>
+ <comment xml:lang="fi">Umbrello UML Modeller -tiedosto</comment>
+ <comment xml:lang="fr">Fichier de modélisation UML Umbrello</comment>
+ <comment xml:lang="ga">Samhaltóir UML Umbrello</comment>
+ <comment xml:lang="gd">faidhle Umbrello UML Modeller</comment>
+ <comment xml:lang="gl">Ficheiro de modelo UML de Umbrello</comment>
+ <comment xml:lang="hr">Umbrello UML Modeller datoteka</comment>
+ <comment xml:lang="hu">Umbrello UML-fájl</comment>
+ <comment xml:lang="ia">Umbrello: file Modellator UML</comment>
+ <comment xml:lang="id">File Umbrello UML Modeller</comment>
+ <comment xml:lang="is">Umbrello UML Modeller skrá</comment>
+ <comment xml:lang="it">file del modellatore UML Umbrello</comment>
+ <comment xml:lang="ja">Umbrello UML モデラーファイル</comment>
+ <comment xml:lang="kk">Umbrello UML үлгілеу файлы</comment>
+ <comment xml:lang="km">ឯកសារ Umbrello UML Modeller</comment>
+ <comment xml:lang="ko">Umbrello UML 모델러 파일</comment>
+ <comment xml:lang="lt">Umbrello UML modeliuotojo failas</comment>
+ <comment xml:lang="lv">Umbrello UML Modelētāja fails</comment>
+ <comment xml:lang="ml">ആമ്പ്രല്ലോ യു എം എല് മാത്രക ഫയല്</comment>
+ <comment xml:lang="mr">अंब्रेलो UML मॉडेलर फाईल</comment>
+ <comment xml:lang="nb">Umbrello UML Modeller fil</comment>
+ <comment xml:lang="nds">UML-Modellmakerdatei för Umbrello</comment>
+ <comment xml:lang="nl">Umbrello UML Modeller-bestand</comment>
+ <comment xml:lang="nn">Umbrello UML Modeller-fil</comment>
+ <comment xml:lang="pl">Plik modelu Umbrello UML</comment>
+ <comment xml:lang="pt">Ficheiro de modelação em UML do Umbrello</comment>
+ <comment xml:lang="pt_BR">Arquivo de modelador UML do Umbrello</comment>
+ <comment xml:lang="ro">fișier Modelator UML Umbrello</comment>
+ <comment xml:lang="ru">модель Umbrello</comment>
+ <comment xml:lang="se">Umbrello UML-Modellerfiila</comment>
+ <comment xml:lang="sk">Súbor Umbrello UML Modeller</comment>
+ <comment xml:lang="sl">Datoteka UML modelirnika Umbrello</comment>
+ <comment xml:lang="sr">Умбрелов фајл</comment>
+ <comment xml:lang="sr@ijekavian">Умбрелов фајл</comment>
+ <comment xml:lang="sr@ijekavianlatin">Umbrellov fajl</comment>
+ <comment xml:lang="sr@latin">Umbrellov fajl</comment>
+ <comment xml:lang="sv">Umbrello UML-modelleringsfil</comment>
+ <comment xml:lang="tr">Umbrello UML Modelleyici dosyası</comment>
+ <comment xml:lang="ug">Umbrello UML مودېل قۇرۇش ھۆججىتى</comment>
+ <comment xml:lang="uk">файл інструмента моделювання UML Umbrello</comment>
+ <comment xml:lang="zh_CN">Umbrello UML 建模文件</comment>
+ <comment xml:lang="zh_TW">Umbrello UML 建模工具檔</comment>
+ <glob pattern="*.xmi"/>
+ <glob pattern="*.xmi.tgz"/>
+ <glob pattern="*.xmi.tar.bz2"/>
+ </mime-type>
+
+ <mime-type type="application/x-ms-shortcut">
+ <comment>Windows link</comment>
+ <comment xml:lang="ar">وصلة ويندوز</comment>
+ <comment xml:lang="bs">windows veza</comment>
+ <comment xml:lang="ca">Enllaç del Windows</comment>
+ <comment xml:lang="ca@valencia">Enllaç del Windows</comment>
+ <comment xml:lang="cs">Odkaz Windows</comment>
+ <comment xml:lang="da">Windows-link</comment>
+ <comment xml:lang="de">Windows-Verknüpfung</comment>
+ <comment xml:lang="el">Αρχείο δεσμού Windows</comment>
+ <comment xml:lang="en_GB">Windows link</comment>
+ <comment xml:lang="es">Enlace de Windows</comment>
+ <comment xml:lang="et">Windowsi link-fail</comment>
+ <comment xml:lang="eu">Windows esteka</comment>
+ <comment xml:lang="fi">Windows-linkki</comment>
+ <comment xml:lang="fr">Liens Windows</comment>
+ <comment xml:lang="ga">Nasc Windows</comment>
+ <comment xml:lang="gd">ceangal Windows</comment>
+ <comment xml:lang="gl">Ligazón de Windows</comment>
+ <comment xml:lang="hr">Windows veza</comment>
+ <comment xml:lang="hu">Windows-link</comment>
+ <comment xml:lang="ia">Ligamine de Windows</comment>
+ <comment xml:lang="id">Tautan Windows</comment>
+ <comment xml:lang="is">Windows tengill</comment>
+ <comment xml:lang="it">collegamento di Windows</comment>
+ <comment xml:lang="ja">Windows リンク</comment>
+ <comment xml:lang="kk">Windows сілтемесі</comment>
+ <comment xml:lang="km">តំណវីនដូ</comment>
+ <comment xml:lang="ko">Windows 링크</comment>
+ <comment xml:lang="lt">Windows nuoroda</comment>
+ <comment xml:lang="lv">Windows saite</comment>
+ <comment xml:lang="ml">വിന്ഡോസ് കണ്ണി</comment>
+ <comment xml:lang="mr">विंडोज लिंक</comment>
+ <comment xml:lang="nb">Windows lenke</comment>
+ <comment xml:lang="nds">Windows-Link</comment>
+ <comment xml:lang="nl">Windows-koppeling</comment>
+ <comment xml:lang="nn">Windows-lenkje</comment>
+ <comment xml:lang="pa">ਵਿੰਡੋਜ਼ ਲਿੰਕ</comment>
+ <comment xml:lang="pl">Odnośnik Windows</comment>
+ <comment xml:lang="pt">Hiperligação do Windows</comment>
+ <comment xml:lang="pt_BR">Link do Windows</comment>
+ <comment xml:lang="ro">Legătură Windows</comment>
+ <comment xml:lang="ru">ярлык Windows</comment>
+ <comment xml:lang="se">Windowsliŋka</comment>
+ <comment xml:lang="sk">Odkaz Windows</comment>
+ <comment xml:lang="sl">Povezava v Windows</comment>
+ <comment xml:lang="sr">виндоуз веза</comment>
+ <comment xml:lang="sr@ijekavian">виндоуз веза</comment>
+ <comment xml:lang="sr@ijekavianlatin">windows veza</comment>
+ <comment xml:lang="sr@latin">windows veza</comment>
+ <comment xml:lang="sv">Windows-länk</comment>
+ <comment xml:lang="th">แฟ้มลิงค์ของวินโดวส์</comment>
+ <comment xml:lang="tr">Windows bağlantısı</comment>
+ <comment xml:lang="ug">Windows ئۇلانما</comment>
+ <comment xml:lang="uk">посилання Windows</comment>
+ <comment xml:lang="zh_CN">Windows 链接</comment>
+ <comment xml:lang="zh_TW">Windows 連結檔案</comment>
+ <alias type="application/x-win-lnk"/>
+ <glob pattern="*.lnk"/>
+ </mime-type>
+
+ <mime-type type="application/x-kgetlist">
+ <sub-class-of type="application/xml"/>
+ <comment>KGet download list</comment>
+ <comment xml:lang="ar">قائمة تنزيل KGet</comment>
+ <comment xml:lang="bg">Списък за изтегляне на KGet</comment>
+ <comment xml:lang="bs">KGetova spisak preuzimanja</comment>
+ <comment xml:lang="ca">Llista de baixades del KGet</comment>
+ <comment xml:lang="ca@valencia">Llista de baixades del KGet</comment>
+ <comment xml:lang="cs">Seznam stahování KGet</comment>
+ <comment xml:lang="da">KGet downloadliste</comment>
+ <comment xml:lang="de">KGet-Downloadliste</comment>
+ <comment xml:lang="el">Λίστας λήψης KGet</comment>
+ <comment xml:lang="en_GB">KGet download list</comment>
+ <comment xml:lang="es">Lista de descarga de KGet</comment>
+ <comment xml:lang="et">KGeti allalaadimiste nimekiri</comment>
+ <comment xml:lang="eu">KGet deskaragen zerrenda</comment>
+ <comment xml:lang="fi">KGet-latausluettelo</comment>
+ <comment xml:lang="fr">Liste de téléchargement pour KGet</comment>
+ <comment xml:lang="ga">Liosta íosluchtuithe KGet</comment>
+ <comment xml:lang="gd">liosta luchdaidhean a-nuas KGet</comment>
+ <comment xml:lang="gl">Lista de descargas de KGet</comment>
+ <comment xml:lang="hr">KGet lista preuzimanja</comment>
+ <comment xml:lang="hu">KGet letöltési lista</comment>
+ <comment xml:lang="ia">KGet : Lista de discargar</comment>
+ <comment xml:lang="id">Daftar unduhan KGet</comment>
+ <comment xml:lang="is">KGet niðurhalslisti</comment>
+ <comment xml:lang="it">elenco di scaricamenti di KGet</comment>
+ <comment xml:lang="ja">KGet ダウンロードリスト</comment>
+ <comment xml:lang="kk">KGet жүктеу тізімі</comment>
+ <comment xml:lang="km">បញ្ជីទាញយករបស់ KGet</comment>
+ <comment xml:lang="ko">KGet 다운로드 목록</comment>
+ <comment xml:lang="lt">KGet atsiuntimų sąrašas</comment>
+ <comment xml:lang="lv">KGet jelupielāžu saraksts</comment>
+ <comment xml:lang="ml">കെഗെറ്റ് ഡൌണ്ലോഡ് പട്ടിക</comment>
+ <comment xml:lang="mr">के-गेट डाउनलोड यादी</comment>
+ <comment xml:lang="nb">KGet nedlastingsliste</comment>
+ <comment xml:lang="nds">Daalladen-List för KGet</comment>
+ <comment xml:lang="nl">KGet-downloadlijst</comment>
+ <comment xml:lang="nn">KGet-nedlastingsliste</comment>
+ <comment xml:lang="pa">KGet ਡਾਊਨਲੋਡ ਲਿਸਟ</comment>
+ <comment xml:lang="pl">Lista pobierania KGet</comment>
+ <comment xml:lang="pt">Lista de transferências do KGet</comment>
+ <comment xml:lang="pt_BR">Lista de downloads do KGet</comment>
+ <comment xml:lang="ro">Listă descărcări KGet</comment>
+ <comment xml:lang="ru">список загрузок KGet</comment>
+ <comment xml:lang="se">KGet viežžanlistu</comment>
+ <comment xml:lang="sk">Zoznam sťahovania KGet</comment>
+ <comment xml:lang="sl">Seznam prejemov KGet</comment>
+ <comment xml:lang="sr">К‑гетова списак преузимања</comment>
+ <comment xml:lang="sr@ijekavian">К‑гетова списак преузимања</comment>
+ <comment xml:lang="sr@ijekavianlatin">KGetova spisak preuzimanja</comment>
+ <comment xml:lang="sr@latin">KGetova spisak preuzimanja</comment>
+ <comment xml:lang="sv">Kget-nerladdningslista</comment>
+ <comment xml:lang="th">รายการดาวน์โหลดของ 'ช่วยดาวน์โหลด-K (KGet)'</comment>
+ <comment xml:lang="tr">KGet indirme listesi</comment>
+ <comment xml:lang="ug">KGet چۈشۈرۈش تىزىمى</comment>
+ <comment xml:lang="uk">список отримань KGet</comment>
+ <comment xml:lang="zh_CN">KGet 下载列表</comment>
+ <comment xml:lang="zh_TW">KGet 下載清單</comment>
+ <glob pattern="*.kgt"/>
+ </mime-type>
+ <mime-type type="application/x-kopete-emoticons">
+ <comment>Kopete emoticons archive</comment>
+ <comment xml:lang="ar">أرشف إبتسامات Kopete</comment>
+ <comment xml:lang="bs">Kopeteova arhiva emotikona</comment>
+ <comment xml:lang="ca">Arxiu de les emoticones del Kopete</comment>
+ <comment xml:lang="ca@valencia">Arxiu de les emoticones del Kopete</comment>
+ <comment xml:lang="cs">Archiv emotikonů Kopete</comment>
+ <comment xml:lang="da">Kopete emotikon-arkiv</comment>
+ <comment xml:lang="de">Kopete-Emoticons-Archiv</comment>
+ <comment xml:lang="el">Αρχειοθήκη εικονιδίων διάθεσης Kopete</comment>
+ <comment xml:lang="en_GB">Kopete emoticons archive</comment>
+ <comment xml:lang="es">Archivo de emoticonos de Kopete</comment>
+ <comment xml:lang="et">Kopete emotikoniarhiiv</comment>
+ <comment xml:lang="eu">Kopete emotikoi artxiboa</comment>
+ <comment xml:lang="fi">Kopete-hymiöarkisto</comment>
+ <comment xml:lang="fr">Archive d'émoticônes Kopete</comment>
+ <comment xml:lang="ga">Cartlann straoiseog Kopete</comment>
+ <comment xml:lang="gd">tasglann shamhlaidhean-ghnùis Kopete</comment>
+ <comment xml:lang="gl">Arquivo de emoticonas de Kopete</comment>
+ <comment xml:lang="hr">Kopete arhiva emotikona</comment>
+ <comment xml:lang="hu">Kopete-emotikoncsomag</comment>
+ <comment xml:lang="ia">Kopete : archivo de emoticones</comment>
+ <comment xml:lang="id">Arsip emosikon Kopete</comment>
+ <comment xml:lang="is">Kopete tjáningartáknasafn</comment>
+ <comment xml:lang="it">archivio di faccine di Kopete</comment>
+ <comment xml:lang="ja">Kopete 感情アイコンアーカイブ</comment>
+ <comment xml:lang="kk">Kopete көңіл күйі белгілер архиві</comment>
+ <comment xml:lang="km">ប័ណ្ណសារសញ្ញាអារម្មណ៍របស់ Kopete</comment>
+ <comment xml:lang="ko">Kopete 이모티콘 압축 파일</comment>
+ <comment xml:lang="lt">Kopete jaustukų rinkinys</comment>
+ <comment xml:lang="lv">Kopete emocijzīmju arhīvs</comment>
+ <comment xml:lang="ml">കോപ്പിറ്റേ വികാരചിഹ്നങ്ങളുടെ ശേഖരം</comment>
+ <comment xml:lang="mr">कोपेट भावप्रतिमा संग्रह</comment>
+ <comment xml:lang="nb">Arkiv med Kopete smilefjes</comment>
+ <comment xml:lang="nds">Snutenarchiev för Kopete</comment>
+ <comment xml:lang="nl">Kopete emoticon-archief</comment>
+ <comment xml:lang="nn">Fjesingtema for Kopete</comment>
+ <comment xml:lang="pa">ਕੋਪਟੀ ਈਮੋਸ਼ਨ ਅਕਾਇਵ</comment>
+ <comment xml:lang="pl">Archiwum emotikon Kopete</comment>
+ <comment xml:lang="pt">Pacote de ícones emotivos do Kopete</comment>
+ <comment xml:lang="pt_BR">Arquivo de emoticons do Kopete</comment>
+ <comment xml:lang="ro">Arhivă cu emoticoni Kopete</comment>
+ <comment xml:lang="ru">набор смайликов для Kopete</comment>
+ <comment xml:lang="se">Kopete mojánarkiiva</comment>
+ <comment xml:lang="sk">Archív emotikonov Kopete</comment>
+ <comment xml:lang="sl">Arhiv z izraznimi ikonami za Kopete</comment>
+ <comment xml:lang="sr">Копетеова архива емотикона</comment>
+ <comment xml:lang="sr@ijekavian">Копетеова архива емотикона</comment>
+ <comment xml:lang="sr@ijekavianlatin">Kopeteova arhiva emotikona</comment>
+ <comment xml:lang="sr@latin">Kopeteova arhiva emotikona</comment>
+ <comment xml:lang="sv">Kopete-smilisarkiv</comment>
+ <comment xml:lang="tr">Kopete duygu simgeleri arşivi</comment>
+ <comment xml:lang="ug">Kopete چىراي ئىپادە ئارخىپى</comment>
+ <comment xml:lang="uk">архів емоційок Kopete</comment>
+ <comment xml:lang="zh_CN">Kopete 表情归档</comment>
+ <comment xml:lang="zh_TW">Kopete 表情圖示歸檔</comment>
+ <glob pattern="*.kopete-emoticons"/>
+ </mime-type>
+ <mime-type type="application/x-icq">
+ <comment>ICQ contact</comment>
+ <comment xml:lang="ar">جهة اتصال ICQ</comment>
+ <comment xml:lang="bg">Контакт в ICQ</comment>
+ <comment xml:lang="bs">ICQ kontakt</comment>
+ <comment xml:lang="ca">Contacte de l'ICQ</comment>
+ <comment xml:lang="ca@valencia">Contacte de l'ICQ</comment>
+ <comment xml:lang="cs">Kontakt ICQ</comment>
+ <comment xml:lang="da">ICQ-kontakt</comment>
+ <comment xml:lang="de">ICQ-Kontakt</comment>
+ <comment xml:lang="el">Επαφή ICQ</comment>
+ <comment xml:lang="en_GB">ICQ contact</comment>
+ <comment xml:lang="es">Contacto de ICQ</comment>
+ <comment xml:lang="et">ICQ kontakt</comment>
+ <comment xml:lang="eu">ICQ kontaktua</comment>
+ <comment xml:lang="fi">ICQ-yhteystieto</comment>
+ <comment xml:lang="fr">Contact ICQ</comment>
+ <comment xml:lang="ga">Teagmháil ICQ</comment>
+ <comment xml:lang="gd">neach-aithne ICQ</comment>
+ <comment xml:lang="gl">Contacto do ICQ</comment>
+ <comment xml:lang="hr">ICQ kontakt</comment>
+ <comment xml:lang="hu">ICQ-névjegy</comment>
+ <comment xml:lang="ia">ICQ : Contacto</comment>
+ <comment xml:lang="id">Kontak ICQ</comment>
+ <comment xml:lang="is">ICQ tengiliður</comment>
+ <comment xml:lang="it">contatto ICQ</comment>
+ <comment xml:lang="ja">ICQ コンタクト</comment>
+ <comment xml:lang="kk">ICQ контакты</comment>
+ <comment xml:lang="km">ទំនាក់ទំនង ICQ</comment>
+ <comment xml:lang="ko">ICQ 대화 상대</comment>
+ <comment xml:lang="lt">ICQ kontaktas</comment>
+ <comment xml:lang="lv">ICQ kontakts</comment>
+ <comment xml:lang="ml">ഐ സി ക്യൂ സമ്പര്ക്കം</comment>
+ <comment xml:lang="mr">ICQ संपर्क</comment>
+ <comment xml:lang="ms">Kontak ICQ</comment>
+ <comment xml:lang="nb">ICQ-kontakt</comment>
+ <comment xml:lang="nds">ICQ-Kontakt</comment>
+ <comment xml:lang="nl">ICQ-contact</comment>
+ <comment xml:lang="nn">ICQ-kontakt</comment>
+ <comment xml:lang="pa">ICQ ਸੰਪਰਕ</comment>
+ <comment xml:lang="pl">Kontakt ICQ</comment>
+ <comment xml:lang="pt">Contacto de ICQ</comment>
+ <comment xml:lang="pt_BR">Contato do ICQ</comment>
+ <comment xml:lang="ro">Contact ICQ</comment>
+ <comment xml:lang="ru">контакт ICQ</comment>
+ <comment xml:lang="se">ICQ-oktavuohta</comment>
+ <comment xml:lang="sk">Kontakt ICQ</comment>
+ <comment xml:lang="sl">Stik ICQ</comment>
+ <comment xml:lang="sq">ICQ contact</comment>
+ <comment xml:lang="sr">ајсикју контакт</comment>
+ <comment xml:lang="sr@ijekavian">ајсикју контакт</comment>
+ <comment xml:lang="sr@ijekavianlatin">ICQ kontakt</comment>
+ <comment xml:lang="sr@latin">ICQ kontakt</comment>
+ <comment xml:lang="sv">ICQ-kontakt</comment>
+ <comment xml:lang="th">ที่อยู่ติดต่อของ ICQ</comment>
+ <comment xml:lang="tr">ICQ kişisi</comment>
+ <comment xml:lang="ug">ICQ ئالاقەداش</comment>
+ <comment xml:lang="uk">контакт ICQ</comment>
+ <comment xml:lang="zh_CN">ICQ 联系人</comment>
+ <comment xml:lang="zh_TW">ICQ 聯絡人</comment>
+ <glob pattern="*.uin"/>
+ <glob pattern="*.icq"/>
+ </mime-type>
+
+ <mime-type type="video/x-ms-wmp"> <!-- fdo #19671, rejected because "not a file type, only a plugin type" -->
+ <comment>Microsoft Media Format</comment>
+ <comment xml:lang="ar">تنسيق وسائط مايكروسوفت</comment>
+ <comment xml:lang="bg">Формат Microsoft Media</comment>
+ <comment xml:lang="bs">Microsoftov medija format</comment>
+ <comment xml:lang="ca">Format de suports de Microsoft</comment>
+ <comment xml:lang="ca@valencia">Format de suports de Microsoft</comment>
+ <comment xml:lang="cs">Microsoft Media Format</comment>
+ <comment xml:lang="da">Microsoft medieformat</comment>
+ <comment xml:lang="de">Microsoft-Media-Format</comment>
+ <comment xml:lang="el">Μορφή Μέσων Microsoft</comment>
+ <comment xml:lang="en_GB">Microsoft Media Format</comment>
+ <comment xml:lang="es">Formato de medios de Microsoft</comment>
+ <comment xml:lang="et">Microsoft Media</comment>
+ <comment xml:lang="eu">Microsoft Media Format</comment>
+ <comment xml:lang="fi">Microsoft Media -muoto</comment>
+ <comment xml:lang="fr">Format « Microsoft Média »</comment>
+ <comment xml:lang="ga">Formáid Mheán Microsoft</comment>
+ <comment xml:lang="gd">Microsoft Media Format</comment>
+ <comment xml:lang="gl">Formato de medios de Microsoft</comment>
+ <comment xml:lang="hr">Microsoft Media Format</comment>
+ <comment xml:lang="hu">Microsoft-médiafájl</comment>
+ <comment xml:lang="ia">Formato de Media de Microsoft</comment>
+ <comment xml:lang="id">Format Media Microsoft</comment>
+ <comment xml:lang="is">Microsoft Media Format</comment>
+ <comment xml:lang="it">formato multimediale di Microsoft</comment>
+ <comment xml:lang="ja">Microsoft メディアフォーマット</comment>
+ <comment xml:lang="kk">Microsoft Media Format</comment>
+ <comment xml:lang="km">ទ្រង់ទ្រាយរបស់ Microsoft Media</comment>
+ <comment xml:lang="ko">Microsoft 미디어 포맷</comment>
+ <comment xml:lang="lt">Microsoft media formatas</comment>
+ <comment xml:lang="lv">Microsoft Media formāts</comment>
+ <comment xml:lang="ml">മൈക്രോസോഫ്റ്റ് മിഡിയ ഘടന</comment>
+ <comment xml:lang="mr">मायक्रोसोफ्ट मीडिया पद्धत</comment>
+ <comment xml:lang="nb">Microsoft Media Format</comment>
+ <comment xml:lang="nds">Microsoft-Medienformaat</comment>
+ <comment xml:lang="nl">Microsoft mediaformaat</comment>
+ <comment xml:lang="nn">Microsoft Media-format</comment>
+ <comment xml:lang="pa">Microsoft ਮੀਡਿਆ ਫਾਰਮੈਟ</comment>
+ <comment xml:lang="pl">Microsoft Media Format</comment>
+ <comment xml:lang="pt">Formato Multimédia da Microsoft</comment>
+ <comment xml:lang="pt_BR">Formato de mídia da Microsoft</comment>
+ <comment xml:lang="ro">Microsoft Media Format</comment>
+ <comment xml:lang="ru">файл Microsoft Media</comment>
+ <comment xml:lang="se">Microsoft mediaformáhtta</comment>
+ <comment xml:lang="sk">Microsoft Media Format</comment>
+ <comment xml:lang="sl">Microsoft Media Format</comment>
+ <comment xml:lang="sq">Microsoft Media Format</comment>
+ <comment xml:lang="sr">Мајкрософтов медија формат</comment>
+ <comment xml:lang="sr@ijekavian">Мајкрософтов медија формат</comment>
+ <comment xml:lang="sr@ijekavianlatin">Microsoftov medija format</comment>
+ <comment xml:lang="sr@latin">Microsoftov medija format</comment>
+ <comment xml:lang="sv">Microsoft mediaformat</comment>
+ <comment xml:lang="tr">Microsoft Medya Biçimi</comment>
+ <comment xml:lang="ug">مىكروسوفت ۋاسىتە پىچىمى</comment>
+ <comment xml:lang="uk">Microsoft Media Format</comment>
+ <comment xml:lang="zh_CN">Microsoft 媒体格式</comment>
+ <comment xml:lang="zh_TW">微軟媒體格式</comment>
+ <sub-class-of type="video/x-ms-wmv"/>
+ <alias type="video/mediaplayer"/>
+ <alias type="application/x-mplayer2"/>
+ <glob pattern="*.wmp"/>
+ </mime-type>
+
+ <!-- http://www.dajobe.org/2004/01/turtle/#sec-mime -->
+ <!-- Important: the SPARQL RDF query lanaguge uses turtle encoding for graph patterns. -->
+ <mime-type xmlns="http://www.freedesktop.org/standards/shared-mime-info" type="application/x-turtle"> <!-- fdo #18089, but not in followup #32812 -->
+ <comment>Turtle RDF document</comment>
+ <comment xml:lang="ar">وثيقة Turtle RDF</comment>
+ <comment xml:lang="bs">Turtle RDF dokument</comment>
+ <comment xml:lang="ca">Document RDF del Turtle</comment>
+ <comment xml:lang="ca@valencia">Document RDF del Turtle</comment>
+ <comment xml:lang="cs">Dokument Turtle RDF</comment>
+ <comment xml:lang="da">Turtle RDF-dokument</comment>
+ <comment xml:lang="de">Turtle-RDF-Dokument</comment>
+ <comment xml:lang="el">Έγγραφο Turtle RDF</comment>
+ <comment xml:lang="en_GB">Turtle RDF document</comment>
+ <comment xml:lang="es">Documento RDF Turtle</comment>
+ <comment xml:lang="et">Turtle RDF-dokument</comment>
+ <comment xml:lang="eu">Turtle RDF dokumentua</comment>
+ <comment xml:lang="fi">Turtle RDF -tiedosto</comment>
+ <comment xml:lang="fr">Document « RDF Turtle »</comment>
+ <comment xml:lang="ga">Cáipéis RDF Turtle</comment>
+ <comment xml:lang="gd">sgrìobhainn Turtle RDF</comment>
+ <comment xml:lang="gl">Documento RDF de Turtle</comment>
+ <comment xml:lang="hr">Turtle RDF dokument</comment>
+ <comment xml:lang="hu">Turtle RDF-dokumentum</comment>
+ <comment xml:lang="ia">documento RDF de Turtle</comment>
+ <comment xml:lang="id">Dokumen Turtle RDF</comment>
+ <comment xml:lang="is">Turtle RDF skjal</comment>
+ <comment xml:lang="it">documento Turtle RDF</comment>
+ <comment xml:lang="ja">Turtle RDF 文書</comment>
+ <comment xml:lang="kk">Turtle RDF құжаты</comment>
+ <comment xml:lang="km">ឯកសារ Turtle RDF</comment>
+ <comment xml:lang="ko">Turtle RDF 문서</comment>
+ <comment xml:lang="lt">Turtle RDF dokumentas</comment>
+ <comment xml:lang="lv">Turtle RDF dokuments</comment>
+ <comment xml:lang="ml">ടര്ട്ടില് ആര് ഡി എഫ് രേഖ</comment>
+ <comment xml:lang="mr">टर्टल RDF दस्तऐवज</comment>
+ <comment xml:lang="nb">Turtle RDF-dokument</comment>
+ <comment xml:lang="nds">RDF-Dokment för Turtle</comment>
+ <comment xml:lang="nl">Turtle RDF-document</comment>
+ <comment xml:lang="nn">Turtle RDF-dokument</comment>
+ <comment xml:lang="pa">Turtle RDF ਡੌਕੂਮੈਂਟ</comment>
+ <comment xml:lang="pl">Dokument Turtle RDF</comment>
+ <comment xml:lang="pt">Documento RDF do Turtle</comment>
+ <comment xml:lang="pt_BR">Documento RDF do Turtle</comment>
+ <comment xml:lang="ro">Document RDF Turtle</comment>
+ <comment xml:lang="ru">документ Turtle RDF</comment>
+ <comment xml:lang="se">Turtle RDF-dokumeanta</comment>
+ <comment xml:lang="sk">Dokument Turtle RDF</comment>
+ <comment xml:lang="sl">Dokument Turtle RDF</comment>
+ <comment xml:lang="sq">Turtle RDF dokument</comment>
+ <comment xml:lang="sr">туртл РДФ документ</comment>
+ <comment xml:lang="sr@ijekavian">туртл РДФ документ</comment>
+ <comment xml:lang="sr@ijekavianlatin">Turtle RDF dokument</comment>
+ <comment xml:lang="sr@latin">Turtle RDF dokument</comment>
+ <comment xml:lang="sv">Turtle RDF-dokument</comment>
+ <comment xml:lang="tr">Turtle RDF belgesi</comment>
+ <comment xml:lang="ug">Turtle RDF پۈتۈك</comment>
+ <comment xml:lang="uk">документ RDF Turtle</comment>
+ <comment xml:lang="zh_CN">Turtle RDF 文档</comment>
+ <comment xml:lang="zh_TW">Turtle RDF 文件</comment>
+ <sub-class-of type="text/plain" />
+ </mime-type>
+ <mime-type type="image/x-pic"> <!-- fdo #26038, needs update -->
+ <comment>Softimage PIC image</comment>
+ <comment xml:lang="ar">صورة PIC</comment>
+ <comment xml:lang="bs">Softimidžova PIC slika</comment>
+ <comment xml:lang="ca">Imatge PIC de Softimage</comment>
+ <comment xml:lang="ca@valencia">Imatge PIC de Softimage</comment>
+ <comment xml:lang="cs">Obrázek Softimage PIC</comment>
+ <comment xml:lang="da">Softimage PIC-billede</comment>
+ <comment xml:lang="de">Softimage-PIC-Bild</comment>
+ <comment xml:lang="el">Εικόνα Softimage PIC</comment>
+ <comment xml:lang="en_GB">Softimage PIC image</comment>
+ <comment xml:lang="es">Imagen PIC de Softimage</comment>
+ <comment xml:lang="et">Softimage PIC pilt</comment>
+ <comment xml:lang="eu">Softimage PIC irudia</comment>
+ <comment xml:lang="fi">Softimage PIC -kuva</comment>
+ <comment xml:lang="fr">Image PIC de Softimage</comment>
+ <comment xml:lang="ga">Íomhá PIC Softimage</comment>
+ <comment xml:lang="gd">dealbh Softimage PIC</comment>
+ <comment xml:lang="gl">Imaxe PIC de Softimage</comment>
+ <comment xml:lang="hr">Softimage PIC slika</comment>
+ <comment xml:lang="hu">Softimage PIC-kép</comment>
+ <comment xml:lang="ia">Imagine PIC de SoftImage</comment>
+ <comment xml:lang="id">Image Softimage PIC </comment>
+ <comment xml:lang="is">Softimage PIC mynd</comment>
+ <comment xml:lang="it">immagine Softimage PIC</comment>
+ <comment xml:lang="ja">Softimage PIC 画像</comment>
+ <comment xml:lang="kk">Softimage PIC кескіні</comment>
+ <comment xml:lang="km">រូបភាព Softimage PIC</comment>
+ <comment xml:lang="ko">Softimage PIC 그림</comment>
+ <comment xml:lang="lt">Softimage PIC paveikslėlis</comment>
+ <comment xml:lang="lv">Softimage PIC attēls</comment>
+ <comment xml:lang="ml">സോഫ്റ്റ്ഇമേജ് പിക്ക് ചിത്രം</comment>
+ <comment xml:lang="mr">सोफ्टइमेज PIC प्रतिमा</comment>
+ <comment xml:lang="nb">Softimage PIC-bilde</comment>
+ <comment xml:lang="nds">PIC-Bild vun Softimage</comment>
+ <comment xml:lang="nl">Softimage PIC-image</comment>
+ <comment xml:lang="nn">Softimage PIC-bilete</comment>
+ <comment xml:lang="pl">Plik obrazu Softimage PIC</comment>
+ <comment xml:lang="pt">Imagem PIC da Softimage</comment>
+ <comment xml:lang="pt_BR">Imagem PIC da Softimage</comment>
+ <comment xml:lang="ro">imagine Softimage PIC</comment>
+ <comment xml:lang="ru">изображение Softimage PIC</comment>
+ <comment xml:lang="se">Softimage PIC-govva</comment>
+ <comment xml:lang="sk">Softimage PIC obrázok</comment>
+ <comment xml:lang="sl">Slika Softimage PIC</comment>
+ <comment xml:lang="sr">Софтимиџова ПИЦ слика</comment>
+ <comment xml:lang="sr@ijekavian">Софтимиџова ПИЦ слика</comment>
+ <comment xml:lang="sr@ijekavianlatin">Softimidžova PIC slika</comment>
+ <comment xml:lang="sr@latin">Softimidžova PIC slika</comment>
+ <comment xml:lang="sv">Softimage PIC-bild</comment>
+ <comment xml:lang="th">ภาพรูปแบบ Softimage PIC</comment>
+ <comment xml:lang="tr">Softimage PIC resmi</comment>
+ <comment xml:lang="ug">Softimage PIC سۈرەت</comment>
+ <comment xml:lang="uk">зображення PIC Softimage</comment>
+ <comment xml:lang="zh_CN">Softimage PIC 图像</comment>
+ <comment xml:lang="zh_TW">Softimage PIC 影像</comment>
+ <magic priority="80">
+ <match value="0x5380f634" type="big32" offset="0"/>
+ </magic>
+ <glob pattern="*.pic"/>
+ </mime-type>
+ <mime-type type="text/x-qml"> <!-- *.qmltypes and *.qmlproject added to fdo smi > 1.3 -->
+ <comment>Qt Markup Language file</comment>
+ <comment xml:lang="ar">ملف لغة الوصف Qt</comment>
+ <comment xml:lang="bs">Datoteka Qt jezika za označavanje</comment>
+ <comment xml:lang="ca">Fitxer de llenguatge de marques de les Qt</comment>
+ <comment xml:lang="ca@valencia">Fitxer de llenguatge de marques de les Qt</comment>
+ <comment xml:lang="cs">Soubor Qt Markup Language</comment>
+ <comment xml:lang="da">Qt Markup Language-fil</comment>
+ <comment xml:lang="de">Qt-Markup-Language-Datei</comment>
+ <comment xml:lang="el">Αρχείο γλώσσας σήμανσης Qt</comment>
+ <comment xml:lang="en_GB">Qt Markup Language file</comment>
+ <comment xml:lang="es">Archivo de lenguaje de marcas de Qt</comment>
+ <comment xml:lang="et">Qt märkekeele fail</comment>
+ <comment xml:lang="eu">Qt markatzeko lengoaia fitxategia</comment>
+ <comment xml:lang="fi">Qt-merkintäkielitiedosto</comment>
+ <comment xml:lang="fr">Fichier de langage à balises Qt</comment>
+ <comment xml:lang="ga">Comhad Teanga Mharcála Qt</comment>
+ <comment xml:lang="gd">faidhle Qt Markup Language</comment>
+ <comment xml:lang="gl">Ficheiro na linguaxe de etiquetas de Qt</comment>
+ <comment xml:lang="hr">Datoteka Qt-ovog označnog jezika</comment>
+ <comment xml:lang="hu">Qt Markup Language fájl</comment>
+ <comment xml:lang="ia">Le de linguage de marcation de QT</comment>
+ <comment xml:lang="id">File Language Markup Qt</comment>
+ <comment xml:lang="is">Qt Markup tungumálsskrá</comment>
+ <comment xml:lang="it">File di linguaggio a marcatori di Qt</comment>
+ <comment xml:lang="kk">Qt белгілеу тіліндегі файл</comment>
+ <comment xml:lang="km">ឯកសារភាសាសម្គាល់ Qt </comment>
+ <comment xml:lang="ko">Qt 마크업 언어 파일</comment>
+ <comment xml:lang="lt">Qt ženklinimo kalba</comment>
+ <comment xml:lang="lv">Qt Markup Language fails</comment>
+ <comment xml:lang="mr">क्यूटी मार्कअप भाषा फाईल</comment>
+ <comment xml:lang="nb">FIl for Qt oppmerkingsspråk</comment>
+ <comment xml:lang="nds">Qt-Schriftsatzspraakdatei</comment>
+ <comment xml:lang="nl">Qt Markup Language-bestand</comment>
+ <comment xml:lang="nn">Fil for Qt-oppmerkingsspråk</comment>
+ <comment xml:lang="pl">Plik języka znaczników dla Qt</comment>
+ <comment xml:lang="pt">Ficheiro na Qt Markup Language</comment>
+ <comment xml:lang="pt_BR">Arquivo da Qt Markup Language</comment>
+ <comment xml:lang="ro">Fișier limbaj de marcare Qt</comment>
+ <comment xml:lang="ru">исходный код QML</comment>
+ <comment xml:lang="se">Qt Markup Language-fiila</comment>
+ <comment xml:lang="sk">Súbor značkovacieho jazyka Qt</comment>
+ <comment xml:lang="sl">Datoteka označevalnega jezika Qt (QML)</comment>
+ <comment xml:lang="sr">фајл КуТ‑овог обележивачког језика</comment>
+ <comment xml:lang="sr@ijekavian">фајл КуТ‑овог обележивачког језика</comment>
+ <comment xml:lang="sr@ijekavianlatin">fajl Qt‑ovog obeleživačkog jezika</comment>
+ <comment xml:lang="sr@latin">fajl Qt‑ovog obeleživačkog jezika</comment>
+ <comment xml:lang="sv">Qt-taggspråkfil</comment>
+ <comment xml:lang="tr">Qt İşaretleme Dili dosyası</comment>
+ <comment xml:lang="ug">Qt بەلگە تىل ھۆججىتى</comment>
+ <comment xml:lang="uk">файл мови розмітки Qt</comment>
+ <comment xml:lang="zh_CN">Qt 标记语言文件</comment>
+ <comment xml:lang="zh_TW">Qt 標示語言檔</comment>
+ <magic priority="80">
+ <match type="string" value="import Qt " offset="0:256"/>
+ </magic>
+ <glob pattern="*.qml"/>
+ <glob pattern="*.qmltypes"/>
+ <glob pattern="*.qmlproject"/>
+ </mime-type>
+ <mime-type type="application/vnd.kde.kcfg">
+ <comment>KConfigXT Configuration Options</comment>
+ <comment xml:lang="ca">Opcions de configuració del KConfigXT</comment>
+ <comment xml:lang="ca@valencia">Opcions de configuració del KConfigXT</comment>
+ <comment xml:lang="da">Konfigurationsmuligheder til KConfigXT</comment>
+ <comment xml:lang="de">KConfigXT-Einrichtungsoptionen</comment>
+ <comment xml:lang="en_GB">KConfigXT Configuration Options</comment>
+ <comment xml:lang="es">Opciones de configuración de KConfigXT</comment>
+ <comment xml:lang="eu">KConfigXT konfiguratzeko aukerak</comment>
+ <comment xml:lang="fi">KConfigXT Configuration Options</comment>
+ <comment xml:lang="fr">Options de configuration de KConfigXT</comment>
+ <comment xml:lang="gl">Opcións de configuración de KConfigXT</comment>
+ <comment xml:lang="hu">KConfigXT konfigurációs beállítások</comment>
+ <comment xml:lang="id">Opsi Konfigurasi KConfigXT</comment>
+ <comment xml:lang="it">Opzioni di configurazione KConfigXT</comment>
+ <comment xml:lang="ko">KConfigXT 설정 옵션</comment>
+ <comment xml:lang="nl">Configuratie-opties van KConfigXT</comment>
+ <comment xml:lang="nn">KConfigXT-oppsett</comment>
+ <comment xml:lang="pl">Opcje KConfigXT</comment>
+ <comment xml:lang="pt">Opções de Configuração do KConfigXT</comment>
+ <comment xml:lang="pt_BR">Opções de configuração do KConfigXT</comment>
+ <comment xml:lang="ru">параметры конфигурации KConfigXT</comment>
+ <comment xml:lang="sl">Nastavitvene možnosti KConfigXT</comment>
+ <comment xml:lang="sr">поставне опције К‑конфиг‑ИксТ‑а</comment>
+ <comment xml:lang="sr@ijekavian">поставне опције К‑конфиг‑ИксТ‑а</comment>
+ <comment xml:lang="sr@ijekavianlatin">postavne opcije KConfigXT‑a</comment>
+ <comment xml:lang="sr@latin">postavne opcije KConfigXT‑a</comment>
+ <comment xml:lang="sv">KConfigXT-inställningsalternativ</comment>
+ <comment xml:lang="uk">параметри налаштування KConfigXT</comment>
+ <comment xml:lang="zh_CN">KConfigXT 配置选项</comment>
+ <comment xml:lang="zh_TW">KConfigXT 設定選項</comment>
+ <generic-icon name="application-xml"/> <!-- placeholder until there is an own icon -->
+ <sub-class-of type="application/xml"/>
+ <magic priority="80">
+ <match type="string" value="<!DOCTYPE kcfg" offset="0:256"/>
+ </magic>
+ <root-XML namespaceURI="http://www.kde.org/standards/kcfg/1.0" localName="kcfg"/>
+ <glob pattern="*.kcfg"/>
+ </mime-type>
+ <mime-type type="application/vnd.kde.kcfgc">
+ <comment>KConfigXT Code Generation Options</comment>
+ <comment xml:lang="ca">Opcions de generació de codi del KConfigXT</comment>
+ <comment xml:lang="ca@valencia">Opcions de generació de codi del KConfigXT</comment>
+ <comment xml:lang="da">Kodegenereringsmuligheder til KConfigXT</comment>
+ <comment xml:lang="de">KConfigXT-Optionen zur Quelltexterzeugung</comment>
+ <comment xml:lang="en_GB">KConfigXT Code Generation Options</comment>
+ <comment xml:lang="es">Opciones de generación de código de KConfigXT</comment>
+ <comment xml:lang="eu">KConfigXT kodea sortzeko aukerak</comment>
+ <comment xml:lang="fi">KConfigXT Code Generation Options</comment>
+ <comment xml:lang="fr">Options de génération de code de KConfigXT</comment>
+ <comment xml:lang="gl">Opcións de xeración de código de KConfigXT</comment>
+ <comment xml:lang="hu">KConfigXT kódgenerálási beállítások</comment>
+ <comment xml:lang="id">Opsi Penghasilan Kode KConfigXT</comment>
+ <comment xml:lang="it">Opzioni di generazione codice KConfigXT</comment>
+ <comment xml:lang="ko">KConfigXT 코드 생성 옵션</comment>
+ <comment xml:lang="nl">Codegeneratie-opties van KConfigXT</comment>
+ <comment xml:lang="nn">KConfigXT-kodegeneringsval</comment>
+ <comment xml:lang="pl">Opcje tworzenia kodu KConfigXT</comment>
+ <comment xml:lang="pt">Opções de Geração de Código do KConfigXT</comment>
+ <comment xml:lang="pt_BR">Opções de geração de código do KConfigXT</comment>
+ <comment xml:lang="ru">параметры создания кода KConfigXT</comment>
+ <comment xml:lang="sl">Možnosti ustvarjanja kode KConfigXT</comment>
+ <comment xml:lang="sr">опције генерисања кода К‑конфиг‑ИксТ‑а</comment>
+ <comment xml:lang="sr@ijekavian">опције генерисања кода К‑конфиг‑ИксТ‑а</comment>
+ <comment xml:lang="sr@ijekavianlatin">opcije generisanja koda KConfigXT‑a</comment>
+ <comment xml:lang="sr@latin">opcije generisanja koda KConfigXT‑a</comment>
+ <comment xml:lang="sv">KConfigXT-kodgenereringsalternativ</comment>
+ <comment xml:lang="uk">параметри створення коду KConfigXT</comment>
+ <comment xml:lang="zh_CN">KConfigXT 代码生成选项</comment>
+ <comment xml:lang="zh_TW">KConfigXT 代碼產生選項</comment>
+ <generic-icon name="text-plain"/>
+ <sub-class-of type="text/plain"/>
+ <glob pattern="*.kcfgc"/>
+ </mime-type>
+ <mime-type type="application/vnd.kde.kxmlguirc">
+ <comment>KXMLGUI UI Declaration</comment>
+ <comment xml:lang="ca">Declaració IU KXMLGUI</comment>
+ <comment xml:lang="ca@valencia">Declaració IU KXMLGUI</comment>
+ <comment xml:lang="da">KXMLGUI UI-erklæring</comment>
+ <comment xml:lang="de">KXMLGUI-UI-Deklaration</comment>
+ <comment xml:lang="en_GB">KXMLGUI UI Declaration</comment>
+ <comment xml:lang="es">Declaración de interfaz de usuario de KXMLGUI</comment>
+ <comment xml:lang="eu">KXMLGUI UI deklarazioa</comment>
+ <comment xml:lang="fi">KXMLGUI UI Declaration</comment>
+ <comment xml:lang="fr">Déclaration d'interface KXMLGUI</comment>
+ <comment xml:lang="gl">Declaración de interface gráfica de KXMLGUI</comment>
+ <comment xml:lang="hu">KXMLGUI UI deklaráció</comment>
+ <comment xml:lang="id">Deklarasi KXMLGUI UI</comment>
+ <comment xml:lang="it">Dichiarazione UI KXMLGUI</comment>
+ <comment xml:lang="ko">KXMLGUI UI 선언</comment>
+ <comment xml:lang="nl">Declaratie van KXMLGUI UI</comment>
+ <comment xml:lang="nn">KXMLGUI UI-deklarasjon</comment>
+ <comment xml:lang="pl">Dklaracja KXMLGUI UI</comment>
+ <comment xml:lang="pt">Declaração de UI do KXMLGUI</comment>
+ <comment xml:lang="pt_BR">Declaração UI do KXMLGUI</comment>
+ <comment xml:lang="ru">конфигурация интерфейса KXMLGUI</comment>
+ <comment xml:lang="sl">Deklaracija uporabniškega vmesnika KXMLGUI</comment>
+ <comment xml:lang="sr">декларације за KXmlGui</comment>
+ <comment xml:lang="sr@ijekavian">декларације за KXmlGui</comment>
+ <comment xml:lang="sr@ijekavianlatin">deklaracije za KXmlGui</comment>
+ <comment xml:lang="sr@latin">deklaracije za KXmlGui</comment>
+ <comment xml:lang="sv">KXMLGUI-användargränssnittsdeklaration</comment>
+ <comment xml:lang="uk">оголошення інтерфейсу KXMLGUI</comment>
+ <comment xml:lang="zh_CN">KXMLGUI 用户界面声明</comment>
+ <comment xml:lang="zh_TW">KXMLGUI UI 宣告</comment>
+ <generic-icon name="application-xml"/> <!-- placeholder until there is an own icon -->
+ <sub-class-of type="application/xml"/>
+ <magic priority="80">
+ <match type="string" value="<!DOCTYPE gui" offset="0:256"/>
+ <match type="string" value="<!DOCTYPE kpartgui" offset="0:256"/>
+ </magic>
+ <root-XML namespaceURI="https://www.kde.org/standards/kxmlgui/1.0" localName="gui"/>
+ <glob pattern="*.rc"/>
+ </mime-type>
+ <mime-type type="application/vnd.kde.knotificationrc">
+ <comment>KNotification Declaration</comment>
+ <comment xml:lang="ca">Declaració del KNotification</comment>
+ <comment xml:lang="ca@valencia">Declaració del KNotification</comment>
+ <comment xml:lang="da">KNotification-erklæring</comment>
+ <comment xml:lang="de">KNotification-Deklaration</comment>
+ <comment xml:lang="en_GB">KNotification Declaration</comment>
+ <comment xml:lang="es">Declaración de KNotification</comment>
+ <comment xml:lang="eu">KNotification deklarazioa</comment>
+ <comment xml:lang="fi">KNotification Declaration</comment>
+ <comment xml:lang="fr">Déclaration de KNotification</comment>
+ <comment xml:lang="gl">Declaración de KNotification</comment>
+ <comment xml:lang="hu">KNotification deklaráció</comment>
+ <comment xml:lang="id">Deklarasi KNotification</comment>
+ <comment xml:lang="it">Dichiarazione KNotification</comment>
+ <comment xml:lang="ko">KNotification 선언</comment>
+ <comment xml:lang="nl">Declaratie van KNotification</comment>
+ <comment xml:lang="nn">KNotification-deklarasjon</comment>
+ <comment xml:lang="pl">Deklaracja KNotification</comment>
+ <comment xml:lang="pt">Declaração do KNotification</comment>
+ <comment xml:lang="pt_BR">Declaração do KNotification</comment>
+ <comment xml:lang="ru">конфигурация KNotification</comment>
+ <comment xml:lang="sl">Deklaracija KNotification</comment>
+ <comment xml:lang="sr">декларације за KNotification</comment>
+ <comment xml:lang="sr@ijekavian">декларације за KNotification</comment>
+ <comment xml:lang="sr@ijekavianlatin">deklaracije za KNotification</comment>
+ <comment xml:lang="sr@latin">deklaracije za KNotification</comment>
+ <comment xml:lang="sv">KNotification-deklaration</comment>
+ <comment xml:lang="uk">оголошення KNotification</comment>
+ <comment xml:lang="zh_CN">Knotification 声明</comment>
+ <comment xml:lang="zh_TW">KNotification 宣告</comment>
+ <generic-icon name="text-plain"/> <!-- placeholder until there is an own icon -->
+ <sub-class-of type="text/plain"/>
+ <glob pattern="*.notifyrc"/>
+ </mime-type>
+</mime-info>
--- /dev/null
+remove_definitions(-DQT_NO_CAST_FROM_ASCII)
+
+find_package(Qt5 ${REQUIRED_QT_VERSION} CONFIG QUIET OPTIONAL_COMPONENTS Widgets)
+if(NOT Qt5Widgets_FOUND)
+ message(STATUS "Qt5Widgets not found, examples will not be built.")
+ return()
+endif()
+
+add_executable(kdirwatchtest_gui kdirwatchtest_gui.cpp)
+target_link_libraries(kdirwatchtest_gui Qt5::Widgets KF5::CoreAddons)
+
+add_executable(faceicontest faceicontest.cpp)
+target_link_libraries(faceicontest Qt5::Widgets KF5::CoreAddons)
--- /dev/null
+/*
+ * Copyright (C) 2014 Nicolás Alvarez <nicolas.alvarez@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License version 2 as published by the Free Software Foundation;
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "faceicontest.h"
+
+#include <QApplication>
+#include <QVBoxLayout>
+#include <QListWidget>
+#include <QDebug>
+#include <kuser.h>
+
+int main(int argc, char **argv)
+{
+ QApplication app(argc, argv);
+
+ FaceIconTest *mainWin = new FaceIconTest();
+ mainWin->show();
+ return app.exec();
+}
+FaceIconTest::FaceIconTest()
+{
+ QVBoxLayout *layout = new QVBoxLayout(this);
+ listWidget = new QListWidget(this);
+ layout->addWidget(listWidget);
+
+ QList<KUser> users = KUser::allUsers();
+ Q_FOREACH (const KUser &u, users) {
+ QPixmap pixmap(u.faceIconPath());
+ if (pixmap.isNull()) {
+ pixmap = QPixmap(QSize(48, 48));
+ pixmap.fill();
+ } else {
+ pixmap = pixmap.scaled(48, 48, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
+ }
+
+ QListWidgetItem *item = new QListWidgetItem(u.loginName(), listWidget);
+ item->setData(Qt::DecorationRole, pixmap);
+ }
+}
--- /dev/null
+/*
+ * Copyright (C) 2014 Nicolás Alvarez <nicolas.alvarez@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License version 2 as published by the Free Software Foundation;
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef FACEICONTEST_H
+#define FACEICONTEST_H
+
+#include <QWidget>
+
+class FaceIconTest : public QWidget
+{
+ Q_OBJECT
+public:
+ FaceIconTest();
+
+private:
+ class QListWidget *listWidget;
+};
+
+#endif
--- /dev/null
+/* This file is part of the KDE libraries
+ Copyright 1998 Sven Radej <sven@lisa.exp.univie.ac.at>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include "kdirwatchtest.h"
+
+#include <QCoreApplication>
+#include <QFile>
+#include <QStringList>
+
+#include <QDebug>
+
+// TODO debug crash when calling "./kdirwatchtest ./kdirwatchtest"
+
+int main(int argc, char **argv)
+{
+ // TODO port to QCommandLineArguments once it exists
+ //options.add("+[directory ...]", qi18n("Directory(ies) to watch"));
+
+ QCoreApplication a(argc, argv);
+
+ myTest testObject;
+
+ KDirWatch *dirwatch1 = KDirWatch::self();
+ KDirWatch *dirwatch2 = new KDirWatch;
+
+ testObject.connect(dirwatch1, SIGNAL(dirty(QString)), SLOT(dirty(QString)));
+ testObject.connect(dirwatch1, SIGNAL(created(QString)), SLOT(created(QString)));
+ testObject.connect(dirwatch1, SIGNAL(deleted(QString)), SLOT(deleted(QString)));
+
+ // TODO port to QCommandLineArguments once it exists
+ const QStringList args = a.arguments();
+ for (int i = 1; i < args.count(); ++i) {
+ const QString arg = args.at(i);
+ if (!arg.startsWith("-")) {
+ qDebug() << "Watching: " << arg;
+ dirwatch2->addDir(arg);
+ }
+ }
+
+ QString home = QString(getenv("HOME")) + '/';
+ QString desk = home + "Desktop/";
+ qDebug() << "Watching: " << home;
+ dirwatch1->addDir(home);
+ qDebug() << "Watching file: " << home << "foo ";
+ dirwatch1->addFile(home + "foo");
+ qDebug() << "Watching: " << desk;
+ dirwatch1->addDir(desk);
+ QString test = home + "test/";
+ qDebug() << "Watching: (but skipped) " << test;
+ dirwatch1->addDir(test);
+
+ dirwatch1->startScan();
+ dirwatch2->startScan();
+
+ if (!dirwatch1->stopDirScan(home)) {
+ qDebug() << "stopDirscan: " << home << " error!";
+ }
+ if (!dirwatch1->restartDirScan(home)) {
+ qDebug() << "restartDirScan: " << home << "error!";
+ }
+ if (!dirwatch1->stopDirScan(test)) {
+ qDebug() << "stopDirScan: error";
+ }
+
+ KDirWatch::statistics();
+
+ delete dirwatch2;
+
+ KDirWatch::statistics();
+
+ return a.exec();
+}
--- /dev/null
+/* This file is part of the KDE libraries
+ Copyright 1998 Sven Radej <sven@lisa.exp.univie.ac.at>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef _KDIRWATCHTEST_H_
+#define _KDIRWATCHTEST_H_
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <QObject>
+
+#include "kdirwatch.h"
+
+class myTest : public QObject
+{
+ Q_OBJECT
+public:
+ myTest() { }
+public Q_SLOTS:
+ void dirty(const QString &a)
+ {
+ printf("Dirty: %s\n", a.toLocal8Bit().constData());
+ }
+ void created(const QString &f)
+ {
+ printf("Created: %s\n", f.toLocal8Bit().constData());
+ }
+ void deleted(const QString &f)
+ {
+ printf("Deleted: %s\n", f.toLocal8Bit().constData());
+ }
+};
+
+#endif
--- /dev/null
+/*
+ * Copyright (C) 2006 Dirk Stoecker <kde@dstoecker.de>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License version 2 as published by the Free Software Foundation;
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "kdirwatchtest_gui.h"
+
+#include <kdirwatch.h>
+#include <qplatformdefs.h>
+#include <QDir>
+#include <QApplication>
+#include <QLabel>
+#include <QLayout>
+#include <QLineEdit>
+#include <QPushButton>
+#include <QTextBrowser>
+
+int main(int argc, char **argv)
+{
+ QApplication app(argc, argv);
+
+ KDirWatchTest_GUI *mainWin = new KDirWatchTest_GUI();
+ mainWin->show();
+ return app.exec();
+}
+
+KDirWatchTest_GUI::KDirWatchTest_GUI() : QWidget()
+{
+ QPushButton *e, *f;
+
+ QVBoxLayout *lay = new QVBoxLayout(this);
+ lay->setMargin(0);
+ lay->addWidget(l1 = new QLineEdit(QLatin1String("Test 1"), this));
+ lay->addWidget(l2 = new QLineEdit(QLatin1String("Test 2"), this));
+ lay->addWidget(l3 = new QLineEdit(QLatin1String("Test 3"), this));
+ lay->addWidget(m_eventBrowser = new QTextBrowser(this));
+ lay->addWidget(d = new QLineEdit(QLatin1String("Status"), this));
+ lay->addWidget(e = new QPushButton(QLatin1String("new file"), this));
+ lay->addWidget(f = new QPushButton(QLatin1String("delete file"), this));
+
+ dir = QDir::currentPath();
+ file = dir + QLatin1String("/testfile_kdirwatchtest_gui");
+
+ w1 = new KDirWatch();
+ w1->setObjectName(QLatin1String("w1"));
+ w2 = new KDirWatch();
+ w2->setObjectName(QLatin1String("w2"));
+ w3 = new KDirWatch();
+ w3->setObjectName(QLatin1String("w3"));
+ connect(w1, SIGNAL(dirty(QString)), this, SLOT(slotDir1(QString)));
+ connect(w2, SIGNAL(dirty(QString)), this, SLOT(slotDir2(QString)));
+ connect(w3, SIGNAL(dirty(QString)), this, SLOT(slotDir3(QString)));
+ w1->addDir(dir);
+ w2->addDir(dir);
+ w3->addDir(dir);
+
+ KDirWatch *w4 = new KDirWatch(this);
+ w4->setObjectName(QLatin1String("w4"));
+ w4->addDir(dir, KDirWatch::WatchFiles | KDirWatch::WatchSubDirs);
+ connect(w1, SIGNAL(dirty(QString)), this, SLOT(slotDirty(QString)));
+ connect(w1, SIGNAL(created(QString)), this, SLOT(slotCreated(QString)));
+ connect(w1, SIGNAL(deleted(QString)), this, SLOT(slotDeleted(QString)));
+
+ KDirWatch *w5 = new KDirWatch(this);
+ w5->setObjectName(QLatin1String(QLatin1String("w5")));
+ w5->addFile(file);
+ connect(w5, SIGNAL(dirty(QString)), this, SLOT(slotDirty(QString)));
+ connect(w5, SIGNAL(created(QString)), this, SLOT(slotCreated(QString)));
+ connect(w5, SIGNAL(deleted(QString)), this, SLOT(slotDeleted(QString)));
+
+ lay->addWidget(new QLabel(QLatin1String("Directory = ") + dir, this));
+ lay->addWidget(new QLabel(QLatin1String("File = ") + file, this));
+
+ connect(e, SIGNAL(clicked()), this, SLOT(slotNewClicked()));
+ connect(f, SIGNAL(clicked()), this, SLOT(slotDeleteClicked()));
+
+ setMinimumWidth(800);
+ setMinimumHeight(400);
+}
+
+void KDirWatchTest_GUI::slotDir1(const QString &a)
+{
+ l1->setText(QLatin1String("Test 1 changed ") + a + QLatin1String(" at ") + QTime::currentTime().toString());
+}
+
+void KDirWatchTest_GUI::slotDir2(const QString &a)
+{
+ // This used to cause bug #119341, fixed now
+#if 1
+ w2->stopDirScan(QLatin1String(a.toLatin1().constData()));
+ w2->restartDirScan(QLatin1String(a.toLatin1().constData()));
+#endif
+ l2->setText(QLatin1String("Test 2 changed ") + a + QLatin1String(" at ") + QTime::currentTime().toString());
+}
+
+void KDirWatchTest_GUI::slotDir3(const QString &a)
+{
+ l3->setText(QLatin1String("Test 3 changed ") + a + QLatin1String(" at )") + QTime::currentTime().toString());
+}
+
+void KDirWatchTest_GUI::slotDeleteClicked()
+{
+ remove(file.toLatin1().constData());
+ d->setText(QLatin1String("Delete clicked at ") + QTime::currentTime().toString());
+}
+
+void KDirWatchTest_GUI::slotNewClicked()
+{
+ fclose(QT_FOPEN(file.toLatin1().constData(), "wb"));
+ d->setText(QLatin1String("New clicked at ") + QTime::currentTime().toString());
+}
+
+void KDirWatchTest_GUI::slotDirty(const QString &path)
+{
+ m_eventBrowser->append(QLatin1String("Dirty(") + sender()->objectName() + QLatin1String("): ") + path + QLatin1Char('\n'));
+}
+
+void KDirWatchTest_GUI::slotCreated(const QString &path)
+{
+ m_eventBrowser->append(QLatin1String("Created(") + sender()->objectName() + QLatin1String("): ") + path + QLatin1Char('\n'));
+}
+
+void KDirWatchTest_GUI::slotDeleted(const QString &path)
+{
+ m_eventBrowser->append(QLatin1String("Deleted(") + sender()->objectName() + QLatin1String("): ") + path + QLatin1Char('\n'));
+}
+
--- /dev/null
+// krazy:excludeall=qclasses
+/*
+ * Copyright (C) 2006 Dirk Stoecker <kde@dstoecker.de>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License version 2 as published by the Free Software Foundation;
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef KDIRWATCHTEST_GUI_H
+#define KDIRWATCHTEST_GUI_H
+
+#include <QDialog>
+
+class QTextBrowser;
+
+class KDirWatchTest_GUI : public QWidget
+{
+ Q_OBJECT
+public:
+ KDirWatchTest_GUI();
+protected Q_SLOTS:
+ void slotNewClicked();
+ void slotDeleteClicked();
+ void slotDir1(const QString &path);
+ void slotDir2(const QString &path);
+ void slotDir3(const QString &path);
+ void slotDirty(const QString &);
+ void slotCreated(const QString &);
+ void slotDeleted(const QString &);
+
+private:
+ class QLineEdit *d;
+ QString file, dir;
+ class KDirWatch *w1;
+ class KDirWatch *w2;
+ class KDirWatch *w3;
+ class QLineEdit *l1, *l2, *l3;
+ QTextBrowser *m_eventBrowser;
+};
+
+#endif
--- /dev/null
+/* This file is part of the KDE libraries
+ Copyright (c) 1999 Waldo Bastian <bastian@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include <QList>
+#include <QString>
+
+#include "krandomsequence.h"
+#include "krandom.h"
+
+#include <stdio.h>
+
+int
+main(/*int argc, char *argv[]*/)
+{
+ long seed;
+ KRandomSequence seq;
+
+ seed = 2;
+ seq.setSeed(seed); printf("Seed = %4ld :", seed);
+ for (int i = 0; i < 20; i++) {
+ printf("%3ld ", seq.getLong(100));
+ }
+ printf("\n");
+
+ seed = 0;
+ seq.setSeed(seed); printf("Seed = %4ld :", seed);
+ for (int i = 0; i < 20; i++) {
+ printf("%3ld ", seq.getLong(100));
+ }
+ printf("\n");
+
+ seed = 0;
+ seq.setSeed(seed); printf("Seed = %4ld :", seed);
+ for (int i = 0; i < 20; i++) {
+ printf("%3ld ", seq.getLong(100));
+ }
+ printf("\n");
+
+ seed = 2;
+ seq.setSeed(seed); printf("Seed = %4ld :", seed);
+ for (int i = 0; i < 20; i++) {
+ printf("%3ld ", seq.getLong(100));
+ }
+ printf("\n");
+
+ seq.setSeed(KRandom::random());
+
+ QList<QString> list;
+ list.append(QLatin1String("A"));
+ list.append(QLatin1String("B"));
+ list.append(QLatin1String("C"));
+ list.append(QLatin1String("D"));
+ list.append(QLatin1String("E"));
+ list.append(QLatin1String("F"));
+ list.append(QLatin1String("G"));
+
+ for (QList<QString>::Iterator str = list.begin(); str != list.end(); ++str) {
+ printf("%s", str->toLatin1().data());
+ }
+ printf("\n");
+
+ seq.randomize(list);
+
+ for (QList<QString>::Iterator str = list.begin(); str != list.end(); ++str) {
+ printf("%s", str->toLatin1().data());
+ }
+ printf("\n");
+
+ seq.randomize(list);
+
+ for (QList<QString>::Iterator str = list.begin(); str != list.end(); ++str) {
+ printf("%s", str->toLatin1().data());
+ }
+ printf("\n");
+
+ seq.randomize(list);
+
+ for (QList<QString>::Iterator str = list.begin(); str != list.end(); ++str) {
+ printf("%s", str->toLatin1().data());
+ }
+ printf("\n");
+}